关于幸存者偏差

在“择天记说,经验正在杀死你”一文中,我提到“圣后天海幽雪选择修复星盘大阵来拯救大周”这一行为中,体现了幸存者偏差这一思维错误。有朋友提出质疑,为此我又找资料重新理解了一下。

先看百度百科的解释:

幸存者偏差(Survivorship bias),另译为“生存者偏差”或“存活者偏差”,驳斥的是一种常见的逻辑谬误(“谬误”而不是“偏差”),这个被驳斥的逻辑谬误指的是只能看到经过某种筛选而产生的结果,而没有意识到筛选的过程,因此忽略了被筛选掉的关键信息。这东西的别名有很多,比如“沉默的数据”、“死人不会说话”等等。

再看《清醒思考的艺术》第一篇,幸存偏误(幸存者偏差):

由于日常生活中更容易看到成功、看不到失败,你会系统性地高估成功的希望。

清醒思考的艺术》中的说法更容易理解(实际上它和百度百科的解释是互为表里)。

你看到阿里上市、腾讯上市、陌陌上市让很多程序员财务自由,就认为自己也可以加入一家创业公司,等待上市后财务自由。这就是幸存者偏差。

你看到有的 IT 培训机构的学员一培训出来就找到月薪 2w 的工作,就认为自己也可以通过这样的途径来获得 2w 月薪。这就是幸存者偏差。

幸存者偏差往往也会发生在个人经验领域。即:你会认为自己在某件事上的成功经验对别人也适合,并且还会认为别人只能按你说的做才会获得这件事的成功

举几个简单的例子:

  • 我上次感冒吃了白加黑好了,白加黑效果最棒,你吃了也肯定好。
  • 我生儿子时最爱吃酸辣的,你现在多吃酸多吃辣,准生儿子。(《摔跤吧爸爸》中有一段类似的描写)
  • 我上次绕道西三环去机场一路畅通,只用了半个小时,你今天也走西三环,最多四十分钟肯定到机场。

我们开发中也经常会遇到。

你接手了一个老项目,它的后台服务每天 crash 一次,它单机(不论配置、带宽等多高)最多处理 137 个并发连接,你根据过去的经验,认为其架构设计糟糕,必须要重构才能真正改变现状。而且,你认为由你来重构,一定会让这个项目发布的服务满足 7x24 小时稳定运行,单机 1000 并发以上。这种情况下,你其实也犯了幸存者偏差的思维错误,同时还可能陷入了过度自信的误区。

说回天海幽雪认为星盘大阵能拯救大周这件事上来,实际上是她个人经历了一次星盘大阵拯救大周的经验,就认为以后大周发生危机星盘大阵肯定也能拯救大周。这里面有几种思维误区:她认为大周获救是星盘大阵的功劳,这是归因错误;大周一有危机发生,她就想到星盘大阵,这是一种联想偏误;她大大高估了星盘大阵的作用,这是一种幸存者偏差。

我在之前那篇文章里犯的错误是:我说它是幸存者偏差,但后面解释的是归因错误和联想偏误。

“幸存偏误”里有一段话,特别值得一看:

当足够多的科学家调查某种现象时,就会出现这样的情况:其中一些研究纯属巧合地得出了一个重要的统计结果——比如喝红葡萄酒和长寿之间的关系。于是这些(错误的)研究立即赢得了很高的知名度。这就是一个幸存偏误。

“幸存偏误”的最后一段,给出了避免幸存者偏差的办法:

幸存偏误意味着:你系统性地高估了成功概率。解决办法:尽可能常去逛逛曾经大有希望的项目、投资和事业的目的。这样的散步虽然伤感,但对你是有好处的。

我忽然想起一个案例——莫斯利安酸奶利用长寿村做广告,它使用了哪几种思维错误来诱导人们购买呢?请留言说说你的看法。


相关阅读:

以下是使用Jupyter Notebook进行泰坦尼克号幸存者分类的步骤: 1. 导入必要的库和数据集 ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv') ``` 2. 数据探索和可视化 ```python # 查看数据集前5行 train_data.head() # 查看数据集信息 train_data.info() # 查看数据集数值型特征的统计信息 train_data.describe() # 查看数据集各特征之间的相关性 sns.heatmap(train_data.corr(), annot=True, cmap='coolwarm') # 查看幸存者和未幸存者的数量 sns.countplot(x='Survived', data=train_data) # 查看不同性别的幸存者和未幸存者的数量 sns.countplot(x='Survived', hue='Sex', data=train_data) # 查看不同船舱等级的幸存者和未幸存者的数量 sns.countplot(x='Survived', hue='Pclass', data=train_data) # 查看不同年龄段的幸存者和未幸存者的数量 sns.histplot(x='Age', hue='Survived', data=train_data, kde=True) ``` 3. 数据清洗和特征工程 ```python # 填充缺失值 train_data['Age'].fillna(train_data['Age'].median(), inplace=True) test_data['Age'].fillna(test_data['Age'].median(), inplace=True) test_data['Fare'].fillna(test_data['Fare'].median(), inplace=True) # 将性别和登船港口转换为数值型特征 train_data['Sex'] = train_data['Sex'].map({'male': 0, 'female': 1}) test_data['Sex'] = test_data['Sex'].map({'male': 0, 'female': 1}) train_data['Embarked'] = train_data['Embarked'].map({'S': 0, 'C': 1, 'Q': 2}) test_data['Embarked'] = test_data['Embarked'].map({'S': 0, 'C': 1, 'Q': 2}) # 创建新特征FamilySize和IsAlone train_data['FamilySize'] = train_data['SibSp'] + train_data['Parch'] + 1 test_data['FamilySize'] = test_data['SibSp'] + test_data['Parch'] + 1 train_data['IsAlone'] = np.where(train_data['FamilySize'] == 1, 1, 0) test_data['IsAlone'] = np.where(test_data['FamilySize'] == 1, 1, 0) # 删除无用特征 train_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'SibSp', 'Parch'], axis=1, inplace=True) test_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'SibSp', 'Parch'], axis=1, inplace=True) ``` 4. 模型训练和预测 ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score X = train_data.drop('Survived', axis=1) y = train_data['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = LogisticRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test) print('Accuracy:', accuracy_score(y_test, y_pred)) ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值