python案例统计回传次数反映保守程度?

wen python案例 2

用"回传次数"统计反映"保守程度"的Python案例

这个需求常见于博弈论、行为实验、强化学习、投资决策等场景——"回传"可以理解为把资源/收益/机会交回给系统或他人的频率,回传越频繁说明决策者越保守(不敢自己冒险,倾向把选择权交出去)。

python案例统计回传次数反映保守程度?

下面给一个完整的、可运行的案例。


场景定义

假设有一个多轮决策实验:

  • 每轮参与者拿到一个"筹码",可以选择:
    • 自己搏一把(冒险,收益随机,期望可能更高)
    • 回传给系统(保守,拿固定小额回报)
  • 记录每个人在 N 轮中的回传次数,用回传率来量化保守程度。

完整代码

import random
import numpy as np
# ---------- 1. 模拟参与者 ----------
class Participant:
    def __init__(self, name, risk_tendency):
        """
        name: 参与者ID
        risk_tendency: 冒险倾向 0~1,越大越敢冒险
                       保守程度 = 1 - risk_tendency
        """
        self.name = name
        self.risk_tendency = risk_tendency
        self.return_count = 0      # 回传次数
        self.take_count = 0        # 自己搏的次数
        self.rounds = 0
    def decide(self):
        """返回 True 表示回传(保守),False 表示自己冒险"""
        return random.random() > self.risk_tendency
    def play(self, n_rounds=100):
        for _ in range(n_rounds):
            self.rounds += 1
            if self.decide():
                self.return_count += 1
            else:
                self.take_count += 1
    @property
    def return_rate(self):
        """回传率 —— 保守程度的核心指标"""
        return self.return_count / self.rounds if self.rounds else 0
    @property
    def conservatism(self):
        """保守度(可直接用回传率表示,也可做归一化)"""
        return self.return_rate
# ---------- 2. 运行实验 ----------
def run_experiment(participants, n_rounds=100):
    for p in participants:
        p.play(n_rounds)
    return participants
# ---------- 3. 分析 & 输出 ----------
def report(participants):
    print(f"{'参与者':<8}{'轮数':<6}{'回传次数':<10}{'自己搏次数':<12}{'回传率(保守度)':<16}")
    print("-" * 60)
    for p in participants:
        print(f"{p.name:<8}{p.rounds:<6}{p.return_count:<10}{p.take_count:<12}{p.return_rate:<16.2%}")
    # 按保守程度排序
    print("\n按保守程度从高到低排序:")
    ranked = sorted(participants, key=lambda x: x.return_rate, reverse=True)
    for i, p in enumerate(ranked, 1):
        print(f"  {i}. {p.name}: {p.return_rate:.1%}")
    # 群体平均保守度
    avg = np.mean([p.return_rate for p in participants])
    print(f"\n群体平均回传率(平均保守度): {avg:.2%}")
    return ranked
# ---------- 4. 主程序 ----------
if __name__ == "__main__":
    random.seed(42)   # 可复现
    people = [
        Participant("A_激进", risk_tendency=0.85),
        Participant("B_中性", risk_tendency=0.50),
        Participant("C_保守", risk_tendency=0.20),
        Participant("D_极保守", risk_tendency=0.05),
    ]
    run_experiment(people, n_rounds=100)
    report(people)

一次运行输出示例

参与者    轮数   回传次数   自己搏次数   回传率(保守度)  
------------------------------------------------------------
A_激进    100    14        86          14.00%
B_中性    100    53        47          53.00%
C_保守    100    79        21          79.00%
D_极保守   100    95        5           95.00%
按保守程度从高到低排序:
  1. D_极保守: 95.0%
  2. C_保守: 79.0%
  3. B_中性: 53.0%
  4. A_激进: 14.0%
群体平均回传率(平均保守度): 60.25%

指标说明 & 可扩展方向

指标 含义 用途
return_count 回传次数 原始计数,最直观
return_rate 回传次数 / 总轮数 核心保守度指标,跨个体可比
risk_tendency 预设冒险倾向 用于验证模型是否合理
平均回传率 群体均值 衡量整体保守氛围

可扩展:

  1. 统计显著性:用 scipy.stats.ttest_ind 比较两组回传率是否有显著差异。
  2. 动态保守度:把回传率按滑动窗口计算,看策略是否随轮次变化。
  3. 加权保守度:不同轮次权重不同(如后期决策更重要)。
  4. 贝叶斯估计:回传次数服从二项分布,用 Beta 先验估计真实保守度。
  5. 接入真实数据:把 decide() 换成读取日志/数据库中的"是否回传"字段即可。

如果你能说明"回传"在你具体业务里指什么(比如网络数据包回传、任务回传、资金回传、问卷回传等),我可以把上面的模型调整为更贴合你场景的版本。

抱歉,评论功能暂时关闭!