未记录事实核验 · 状态:维护中

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

warning 本文适用范围与待维护项

本文用于统计学概念入门和模拟数据练习,不报告真实医院或产品业绩。原版的列选择链接污染、辛普森悖论数据及Cohen's h分级问题已在本文修订;修订后的医院模拟数据中,A医院分病情成功率均高于B医院,而总体成功率低于B医院。前后留存率比较只演示比例检验,不能排除时间趋势、用户构成等混杂因素,不能据此断言功能上线造成改善;质量控制图仅为样本均值±3倍样本标准差的教学示意,不替代正式过程控制方案。

📊 统计学是什么(What is Statistics)

abstract 📋 本节概览

  • 🎯 学习目标:深入理解统计学的本质、发展历程与在现代数据分析中的核心作用
  • 📚 前置知识:无
  • ⏱️ 预计用时:15分钟
  • 🔧 实践技能:掌握统计学在Python中的基础应用

🌟 统计学的本质与定义

note 📖 **统计学到底是什么?**

统计学是一门收集、整理、分析和解释数据的科学,它帮助我们从不确定性中发现规律,从复杂数据中提取有价值的信息,并为决策提供科学依据。

📚 统计学的核心任务

1. 数据收集(Data Collection)

  • 设计科学的采样方案
  • 确保数据的代表性和可靠性
  • 控制数据收集过程中的偏差

2. 数据整理(Data Organization)

  • 清洗和预处理数据
  • 建立数据的结构化表示
  • 识别和处理异常值

3. 数据分析(Data Analysis)

  • 运用适当的统计方法
  • 发现数据中的模式和趋势
  • 量化不确定性和风险

4. 结果解释(Interpretation)

  • 将统计结果转化为业务洞察
  • 评估结论的可靠性和适用范围
  • 为决策提供科学依据

🌍 统计学在现实世界中的应用

💼 商业决策

import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt

# 模拟A/B测试数据
np.random.seed(42)
control_conversions = np.random.binomial(1, 0.12, 1000)  # 控制组转化率12%
test_conversions = np.random.binomial(1, 0.15, 1000)     # 测试组转化率15%

# 计算转化率
control_rate = np.mean(control_conversions)
test_rate = np.mean(test_conversions)

print(f"控制组转化率: {control_rate:.3f}")
print(f"测试组转化率: {test_rate:.3f}")
print(f"提升幅度: {(test_rate - control_rate) / control_rate:.2%}")

# 进行显著性检验
stat, p_value = stats.chi2_contingency([
    [sum(control_conversions), len(control_conversions) - sum(control_conversions)],
    [sum(test_conversions), len(test_conversions) - sum(test_conversions)]
])[:2]

print(f"\nP值: {p_value:.4f}")
print(f"结果显著性: {'显著' if p_value < 0.05 else '不显著'}")

🏥 医学研究

  • 临床试验设计:确定样本量、随机分组、双盲对照
  • 药物效果评估:比较治疗组与对照组的差异
  • 流行病学调查:分析疾病传播规律和影响因素

🏭 工业质量控制

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 模拟生产线质量数据
np.random.seed(123)
production_data = np.random.normal(100, 2, 50)  # 目标值100,标准差2

# 计算控制限
mean_value = np.mean(production_data)
std_value = np.std(production_data, ddof=1)
ucl = mean_value + 3 * std_value  # 上控制限
lcl = mean_value - 3 * std_value  # 下控制限

# 绘制控制图
plt.figure(figsize=(12, 6))
plt.plot(production_data, 'bo-', markersize=4, linewidth=1)
plt.axhline(y=mean_value, color='g', linestyle='-', label=f'中心线 ({mean_value:.2f})')
plt.axhline(y=ucl, color='r', linestyle='--', label=f'上控制限 ({ucl:.2f})')
plt.axhline(y=lcl, color='r', linestyle='--', label=f'下控制限 ({lcl:.2f})')
plt.title('生产线质量控制图')
plt.xlabel('样本序号')
plt.ylabel('质量指标')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

# 识别异常点
outliers = (production_data > ucl) | (production_data < lcl)
print(f"异常点数量: {sum(outliers)}")
if sum(outliers) > 0:
    print(f"异常点位置: {np.where(outliers)[0]}")

🧬 统计学的发展历程

📈 历史里程碑

早期发展(17-18世纪)

  • 约翰·格朗特(1620-1674):现代统计学之父,发明了生命表
  • 雅各布·伯努利(1654-1705):提出大数定律
  • 亚伯拉罕·棣莫弗(1667-1754):发现正态分布

经典时期(19世纪)

  • 卡尔·弗里德里希·高斯(1777-1855):发展了最小二乘法
  • 弗朗西斯·高尔顿(1822-1911):提出回归概念
  • 卡尔·皮尔逊(1857-1936):创立现代统计学理论体系

现代发展(20世纪至今)

  • 罗纳德·费雪(1890-1962):建立假设检验理论
  • 威廉·戈塞特(1876-1937):发明t检验(笔名Student)
  • 杰齐·奈曼和埃贡·皮尔逊:发展假设检验的功效理论

🔬 统计学与现代技术的融合

🤖 大数据时代的统计学

import pandas as pd
import numpy as np
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt

# 模拟大规模用户行为数据
np.random.seed(42)
n_users = 10000

# 生成多维用户数据
user_data = pd.DataFrame({
    'age': np.random.normal(35, 12, n_users).astype(int),
    'income': np.random.lognormal(10.5, 0.5, n_users),
    'sessions': np.random.poisson(5, n_users),
    'conversion': np.random.binomial(1, 0.15, n_users)
})

# 数据清洗
user_data = user_data[
    (user_data['age'] >= 18) & 
    (user_data['age'] <= 80) & 
    (user_data['income'] > 0)
]

# 多维统计分析
print("=== 用户行为数据统计分析 ===")
print(f"有效样本量: {len(user_data):,}")
print("\n基础统计信息:")
print(user_data.describe())

# 相关性分析
corr_matrix = user_data.corr()
print("\n变量相关性矩阵:")
print(corr_matrix.round(3))

# 转化率分析
age_groups = pd.cut(user_data['age'], bins=[18, 25, 35, 45, 55, 80], labels=['18-25', '26-35', '36-45', '46-55', '56+'])
conversion_by_age = user_data.groupby(age_groups)['conversion'].agg(['count', 'sum', 'mean'])
conversion_by_age['conversion_rate'] = conversion_by_age['mean']

print("\n不同年龄段转化率:")
print(conversion_by_age[['count', 'sum', 'conversion_rate']].round(3))

# 可视化分析
fig, axes = plt.subplots(2, 2, figsize=(15, 12))

# 年龄分布
axes[0,0].hist(user_data['age'], bins=30, alpha=0.7, color='skyblue')
axes[0,0].set_title('用户年龄分布')
axes[0,0].set_xlabel('年龄')
axes[0,0].set_ylabel('频数')

# 收入分布(对数变换)
axes[0,1].hist(np.log(user_data['income']), bins=30, alpha=0.7, color='lightgreen')
axes[0,1].set_title('用户收入分布(对数尺度)')
axes[0,1].set_xlabel('log(收入)')
axes[0,1].set_ylabel('频数')

# 会话数分布
axes[1,0].hist(user_data['sessions'], bins=range(0, 20), alpha=0.7, color='coral')
axes[1,0].set_title('用户会话数分布')
axes[1,0].set_xlabel('会话数')
axes[1,0].set_ylabel('频数')

# 转化率热力图
age_income_bins = pd.qcut(user_data['income'], q=5, labels=[f'Q{i+1}' for i in range(5)])
conversion_heatmap = user_data.groupby([age_groups, age_income_bins])['conversion'].mean().unstack()
sns.heatmap(conversion_heatmap, annot=True, fmt='.3f', cmap='YlOrRd', ax=axes[1,1])
axes[1,1].set_title('年龄-收入分组转化率热力图')
axes[1,1].set_xlabel('收入分位数')
axes[1,1].set_ylabel('年龄组')

plt.tight_layout()
plt.show()

🧠 机器学习中的统计学

  • 概率基础:贝叶斯定理、条件概率
  • 参数估计:最大似然估计、贝叶斯估计
  • 模型评估:交叉验证、置信区间
  • 特征选择:统计显著性检验

⚡ 统计学思维的核心要素

🎯 统计思维的特点

1. 变异性认知

  • 承认数据中存在随机变异
  • 区分系统性差异与随机波动
  • 量化不确定性

2. 样本与总体

  • 理解样本的代表性
  • 从样本推断总体特征
  • 控制抽样偏差

3. 假设检验思维

  • 建立明确的假设
  • 用数据验证假设
  • 控制错误率
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt

# 场景:评估新产品功能上线后的用户留存率变化
np.random.seed(42)

# 历史数据(上线前)
historical_retention = np.random.binomial(1, 0.65, 1000)  # 历史留存率65%

# 新数据(上线后)
new_retention = np.random.binomial(1, 0.68, 800)  # 新留存率68%

# 描述性统计
hist_rate = np.mean(historical_retention)
new_rate = np.mean(new_retention)

print("=== 产品功能上线效果评估 ===")
print(f"历史留存率: {hist_rate:.3f} (样本量: {len(historical_retention)})")
print(f"新功能留存率: {new_rate:.3f} (样本量: {len(new_retention)})")
print(f"绝对提升: {new_rate - hist_rate:.3f}")
print(f"相对提升: {(new_rate - hist_rate) / hist_rate:.2%}")

# 假设检验
# H0: 新功能没有改善留存率 (μ_new <= μ_hist)
# H1: 新功能改善了留存率 (μ_new > μ_hist)

# 使用双样本比例检验
from statsmodels.stats.proportion import proportions_ztest

count = np.array([sum(new_retention), sum(historical_retention)])
nobs = np.array([len(new_retention), len(historical_retention)])

z_stat, p_value = proportions_ztest(count, nobs, alternative='larger')

print(f"\n=== 统计检验结果 ===")
print(f"Z统计量: {z_stat:.4f}")
print(f"P值: {p_value:.4f}")
print(f"显著性水平α=0.05: {'拒绝H0,上线后留存率显著高于上线前(不代表因果改善)' if p_value < 0.05 else '不能拒绝H0,未检出上线后留存率显著高于上线前'}")

# 置信区间估计
from statsmodels.stats.proportion import proportion_confint

ci_low, ci_high = proportion_confint(sum(new_retention), len(new_retention), alpha=0.05)
print(f"\n新功能留存率95%置信区间: [{ci_low:.3f}, {ci_high:.3f}]")

# 效应量计算(Cohen's h)
def cohens_h(p1, p2):
    return 2 * (np.arcsin(np.sqrt(p1)) - np.arcsin(np.sqrt(p2)))

effect_size = cohens_h(new_rate, hist_rate)
print(f"效应量 (Cohen's h): {effect_size:.4f}")

if abs(effect_size) < 0.2:
    effect_interpretation = "低于常用小效应阈值"
elif abs(effect_size) < 0.5:
    effect_interpretation = "小效应"
elif abs(effect_size) < 0.8:
    effect_interpretation = "中等效应"
else:
    effect_interpretation = "大效应"
    
print(f"效应量解释: {effect_interpretation}")

🚨 统计学常见误区与陷阱

❌ 典型误区

1. 相关不等于因果

# 虚假相关:冰淇淋销量与溺水事故的关系
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr

np.random.seed(42)
days = np.arange(1, 366)  # 一年365天
# 温度作为隐变量
temperature = 20 + 15 * np.sin(2 * np.pi * days / 365) + np.random.normal(0, 3, 365)

# 冰淇淋销量与温度正相关
ice_cream_sales = 100 + 3 * temperature + np.random.normal(0, 20, 365)
# 溺水事故与温度也正相关(夏天游泳的人多)
drowning_cases = 2 + 0.1 * temperature + np.random.normal(0, 1, 365)
drowning_cases = np.maximum(0, drowning_cases)  # 确保非负

# 计算相关性
corr_coef, p_value = pearsonr(ice_cream_sales, drowning_cases)

print(f"冰淇淋销量与溺水事故相关系数: {corr_coef:.3f}")
print(f"P值: {p_value:.4f}")
print(f"结论: {'显著正相关' if p_value < 0.05 else '无显著相关'}")
print("\n⚠️ 警告:这是虚假相关!真正的原因是温度(隐变量)")

2. 辛普森悖论

import pandas as pd

# 医院治疗成功率的辛普森悖论(教学模拟数据,非真实医院结果)
data = pd.DataFrame({
    '医院': ['A', 'A', 'B', 'B'],
    '病情': ['轻症', '重症', '轻症', '重症'],
    '治疗成功': [81, 192, 234, 55],
    '总病例': [87, 263, 270, 80]
})

data['成功率'] = data['治疗成功'] / data['总病例']

print("各医院分病情成功率:")
print(data[['医院', '病情', '治疗成功', '总病例', '成功率']].round(3))

# 总体成功率
total_success = data.groupby('医院').agg({
    '治疗成功': 'sum',
    '总病例': 'sum'
}).reset_index()
total_success['总体成功率'] = total_success['治疗成功'] / total_success['总病例']

print("\n各医院总体成功率:")
print(total_success[['医院', '治疗成功', '总病例', '总体成功率']].round(3))
print("\n⚠️ 悖论:A医院在轻症和重症上都比B医院成功率高,但总体成功率却更低!")
print("原因:A医院接收了更多比例的重症患者")

3. 幸存者偏差

  • 只看到成功案例,忽视失败案例
  • 样本选择偏差导致错误结论
  • 需要考虑"沉默的数据"

🔗 学习路径建议

🎯 初学者路径

  1. 数据类型 - 了解数据的基本分类
  2. 描述性统计 - 掌握数据的基本描述方法
  3. 概率的基本概念 - 理解不确定性的数学描述
  4. 正态分布 - 学习最重要的概率分布
  5. 假设检验 - 掌握统计推断的核心工具

🚀 进阶路径

  1. 回归 - 研究变量间的关系
  2. 方差分析(ANOVA) - 比较多组数据的差异
  3. 时间序列 - 分析时间相关的数据
  4. 多元统计分析 - 处理高维数据
  5. 贝叶斯统计 - 现代统计学的重要分支

💼 应用导向

📚 推荐资源

📖 经典教材

  • 《统计学思维》 - Allen B. Downey
  • 《商务与经济统计》 - Anderson, Sweeney, Williams
  • 《概率论与数理统计》 - 茆诗松、程依明、濮晓龙

🔧 实践工具

  • Python:pandas, numpy, scipy, statsmodels, scikit-learn
  • R语言:专业统计分析语言
  • SPSS/SAS:商业统计软件
  • Excel:日常统计分析工具

#统计学 #基础 #数据分析 #Python #概率论 #数理统计