20 种重要统计学方法

20 种重要统计学方法

👇我的小册 45章教程:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。

👇我的小册 AI工具100个实战小案例:(100个AI工具实战小案例) ,原价299,限时早鸟价29,满100人涨10元。数据科学是一个多学科领域,结合了数学、统计学、计算机科学和领域专业知识,以从数据中提取洞察。虽然机器学习算法常常成为焦点,但扎实的统计方法基础同样至关重要。在本文中,我们将探讨每位数据科学家都应熟悉的20种高级统计方法。每种方法都包括简要解释、示例用例以及一段Python代码来说明其用法。

1. 贝叶斯推断是什么贝叶斯推断使用贝叶斯定理,随着更多证据或信息的出现,更新假设的概率。与频率学派方法不同,贝叶斯方法允许你结合先验信念,并通过观察到的数据更新这些信念。

示例用例垃圾邮件过滤:可以将电子邮件是垃圾邮件的先验信念与新证据(邮件中的词语)结合,以更新垃圾邮件的概率。

代码片段以下是使用PyMC3或PyMC进行贝叶斯参数估计的简单示例(例如,抛硬币)。

!pip install pymc3 # 或 pymc

import pymc3 as pm

import numpy as np

# 假设我们观察到20次抛硬币,12次正面,8次反面

observed_heads = 12

observed_tails = 8

with pm.Model() as model:

# 硬币偏倚的先验(theta)

theta = pm.Beta('theta', alpha=1, beta=1)

# 似然

y = pm.Binomial('y', n=observed_heads + observed_tails, p=theta, observed=observed_heads)

# 后验采样

trace = pm.sample(2000, tune=1000, cores=1, chains=2)

pm.summary(trace)2. 最大似然估计(MLE)是什么MLE找到在特定统计模型下使观测数据似然最大化的参数值。

示例用例分布拟合:估计最适合数据的正态分布的参数(均值、方差)。

代码片段使用scipy.stats拟合正态分布:

import numpy as np

from scipy.stats import norm

# 生成合成数据

data = np.random.normal(loc=5, scale=2, size=1000)

# 估计均值和标准差的最大似然估计

mu_hat, std_hat = norm.fit(data)

print(f"估计均值 (mu): {mu_hat:.2f}")

print(f"估计标准差 (sigma): {std_hat:.2f}")3. 假设检验(t检验)是什么假设检验涉及提出一个原假设(无差异/效应)和一个备择假设。t检验专门用于检查两组的均值是否存在显著差异。

示例用例A/B测试:测试新网站布局(B组)是否比旧布局(A组)导致显著不同的平均会话时间。

代码片段使用scipy.stats.ttest_ind进行双样本t检验:

import numpy as np

from scipy.stats import ttest_ind

# 合成数据

group_A = np.random.normal(5, 1, 50)

group_B = np.random.normal(5.5, 1.2, 50)

stat, pvalue = ttest_ind(group_A, group_B)

print(f"T统计量: {stat:.2f}, p值: {pvalue:.4f}")

if pvalue < 0.05:

print("拒绝原假设(存在显著差异)。")

else:

print("未能拒绝原假设(无显著差异)。")4. 方差分析(ANOVA)是什么ANOVA用于检验三个或更多组均值之间是否存在统计学上的显著差异。

示例用例营销实验:通过测量销售提升来评估三种不同广告策略的效果。

代码片段使用scipy.stats.f_oneway:

import numpy as np

from scipy.stats import f_oneway

# 合成数据

group1 = np.random.normal(10, 2, 30)

group2 = np.random.normal(12, 2, 30)

group3 = np.random.normal(14, 2, 30)

f_stat, p_val = f_oneway(group1, group2, group3)

print(f"F统计量: {f_stat:.2f}, p值: {p_val:.4f}")5. 主成分分析(PCA)是什么PCA通过将数据投影到新的正交轴(主成分)上来降低数据的维度,这些轴能够捕捉最多的方差。

示例用例图像压缩:将高维像素数据减少为更少的特征以加快处理速度。

代码片段使用sklearn.decomposition.PCA:

import numpy as np

from sklearn.decomposition import PCA

# 合成数据:100个样本,10个特征

X = np.random.rand(100, 10)

pca = PCA(n_components=2)

X_reduced = pca.fit_transform(X)

print("解释方差比例:", pca.explained_variance_ratio_)

print("降维后的形状:", X_reduced.shape)6. 因子分析是什么因子分析将观测变量建模为潜在(未观测)因子的线性组合,通常用于降维或揭示隐藏结构。

示例用例心理测量学:从问卷数据中识别潜在的人格特质。

代码片段使用factor_analyzer库:

!pip install factor_analyzer

import numpy as np

from factor_analyzer import FactorAnalyzer

# 合成数据(100个样本,6个变量)

X = np.random.rand(100, 6)

fa = FactorAnalyzer(n_factors=2, rotation='varimax')

fa.fit(X)

print("因子载荷:\n", fa.loadings_)7. 聚类分析(K均值)是什么聚类将数据划分为基于相似性的同质组(簇)。K均值是一种基于质心的流行聚类技术。

示例用例客户细分:根据购买模式对客户进行分组。

代码片段使用sklearn.cluster.KMeans:

import numpy as np

from sklearn.cluster import KMeans

# 合成数据:200个样本,2维

X = np.random.rand(200, 2)

kmeans = KMeans(n_clusters=3, random_state=42)

kmeans.fit(X)

print("聚类中心:", kmeans.cluster_centers_)

print("聚类标签:", kmeans.labels_[:10])8. 自助法(Bootstrapping)是什么自助法通过从数据集中重复有放回地抽样来估计统计量(如均值、中位数)的分布(及其不确定性)。

示例用例置信区间:为小数据集的均值估计95%的置信区间。

代码片段展示一个简单的均值自助法:

import numpy as np

np.random.seed(42)

# 原始样本

data = np.random.normal(50, 5, size=100)

def bootstrap_mean_ci(data, n_bootstraps=1000, ci=95):

means = []

n = len(data)

for _ in range(n_bootstraps):

sample = np.random.choice(data, size=n, replace=True)

means.append(np.mean(sample))

lower = np.percentile(means, (100-ci)/2)

upper = np.percentile(means, 100 - (100-ci)/2)

return np.mean(means), (lower, upper)

mean_estimate, (lower_ci, upper_ci) = bootstrap_mean_ci(data)

print(f"自助法均值估计: {mean_estimate:.2f}")

print(f"{95}% 置信区间: [{lower_ci:.2f}, {upper_ci:.2f}]")9. 时间序列分析(ARIMA)是什么ARIMA(自回归积分滑动平均模型)是一种流行的模型,用于通过捕捉数据中的自相关性来预测单变量时间序列数据。

示例用例销售预测:基于过去的表现预测未来销售。

代码片段使用statsmodels.tsa.arima.model:

!pip install statsmodels

import numpy as np

import pandas as pd

from statsmodels.tsa.arima.model import ARIMA

# 合成时间序列数据

np.random.seed(42)

data = np.random.normal(100, 5, 50)

time_series = pd.Series(data)

# 拟合ARIMA模型(p=1, d=1, q=1)

model = ARIMA(time_series, order=(1,1,1))

model_fit = model.fit()

# 预测未来5个点

forecast = model_fit.forecast(steps=5)

print("预测值:", forecast.values)10. 生存分析是什么生存分析处理时间到事件的数据,通常关注事件(如客户流失)在特定时间后发生的概率。

示例用例客户流失:估计客户在取消订阅之前会保持活跃的时间。

代码片段使用lifelines:

!pip install lifelines

import numpy as np

import pandas as pd

from lifelines import KaplanMeierFitter

# 合成生存时间和审查数据

np.random.seed(42)

durations = np.random.exponential(scale=10, size=100)

event_observed = np.random.binomial(1, 0.8, size=100)

kmf = KaplanMeierFitter()

kmf.fit(durations, event_observed=event_observed, label='测试组')

kmf.plot_survival_function()11. 多元回归(多元线性回归)是什么多元线性回归模型用于描述因变量与多个自变量之间的关系。

示例用例定价模型:基于房屋面积、房间数量和位置预测房价。

代码片段使用sklearn.linear_model.LinearRegression:

import numpy as np

from sklearn.linear_model import LinearRegression

# 合成数据:价格 = 100 + 2*房间数 + 0.5*面积 + 噪声

np.random.seed(42)

rooms = np.random.randint(1, 5, 100)

sqft = np.random.randint(500, 2500, 100)

price = 100 + 2*rooms + 0.5*sqft + np.random.normal(0, 50, 100)

X = np.column_stack([rooms, sqft])

y = price

model = LinearRegression()

model.fit(X, y)

print("系数:", model.coef_)

print("截距:", model.intercept_)12. 岭回归/Lasso回归代码片段使用sklearn.linear_model:

import numpy as np

from sklearn.linear_model import Ridge, Lasso

from sklearn.model_selection import train_test_split

# 合成数据

np.random.seed(42)

X = np.random.rand(100, 10)

y = X[:, 0]*5 + X[:, 1]*3 + np.random.normal(0, 0.1, 100)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

ridge = Ridge(alpha=1.0).fit(X_train, y_train)

lasso = Lasso(alpha=0.1).fit(X_train, y_train)

print("岭回归系数:", ridge.coef_)

print("Lasso回归系数:", lasso.coef_)13. 逻辑回归是什么逻辑回归用于二分类问题,建模某一类别或事件存在的概率。

示例用例信用卡欺诈检测:将交易分类为欺诈或合法。

代码片段使用sklearn.linear_model.LogisticRegression:

import numpy as np

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split

np.random.seed(42)

X = np.random.rand(100, 5)

y = np.random.randint(0, 2, 100) # 二分类标签

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = LogisticRegression()

model.fit(X_train, y_train)

accuracy = model.score(X_test, y_test)

print("准确率:", accuracy)14. 混合效应模型是什么混合效应模型(或分层线性模型)包括固定效应(对所有组通用)和随机效应(每组特有)。通常用于纵向数据或分组数据。

示例用例教育数据:测试多个学校的学生成绩,每个学校具有随机截距。

代码片段使用statsmodels的mixedlm:

import pandas as pd

import numpy as np

import statsmodels.formula.api as smf

# 合成数据:每个学生属于特定学校

np.random.seed(42)

school_ids = np.repeat(np.arange(10), 20)

scores = 50 + 5*np.random.rand(200) + 2*school_ids + np.random.normal(0, 5, 200)

df = pd.DataFrame({"score": scores, "school": school_ids})

model = smf.mixedlm("score ~ 1", df, groups=df["school"])

result = model.fit()

print(result.summary())15. 非参数检验(Mann-Whitney U检验)是什么非参数检验不假设数据的特定分布。Mann-Whitney U检验用于比较两个独立样本。

示例用例中位数比较:在不假设正态分布的情况下比较两家商店的销售中位数。

代码片段使用scipy.stats.mannwhitneyu:

import numpy as np

from scipy.stats import mannwhitneyu

# 合成数据

group_A = np.random.exponential(scale=1.0, size=30)

group_B = np.random.exponential(scale=1.2, size=30)

stat, pvalue = mannwhitneyu(group_A, group_B, alternative='two-sided')

print(f"统计量: {stat:.2f}, p值: {pvalue:.4f}")16. 蒙特卡洛模拟是什么蒙特卡洛模拟通过重复随机采样来估计不确定性下不同结果的概率。

示例用例风险分析:在劳动力成本、原材料成本等不确定变量的情况下,预测项目成本超支的概率。

代码片段使用蒙特卡洛方法估计π:

import numpy as np

np.random.seed(42)

n_samples = 10_000_00

xs = np.random.rand(n_samples)

ys = np.random.rand(n_samples)

# 单位圆内的点

inside_circle = (xs**2 + ys**2) <= 1.0

pi_estimate = inside_circle.sum() * 4 / n_samples

print("估计的π值:", pi_estimate)17. 马尔可夫链蒙特卡洛(MCMC)是什么MCMC方法(例如Metropolis-Hastings、Gibbs采样)用于在贝叶斯推断中从后验分布生成样本,尤其是在直接采样困难时。

示例用例参数估计:用于复杂的层次模型,其中直接积分不可行。

代码片段使用PyMC3进行简单的MCMC:

import pymc3 as pm

import numpy as np

# 合成数据

np.random.seed(42)

data = np.random.normal(0, 1, 100)

with pm.Model() as model:

mu = pm.Normal('mu', mu=0, sd=10)

sigma = pm.HalfNormal('sigma', sd=1)

likelihood = pm.Normal('likelihood', mu=mu, sd=sigma, observed=data)

trace = pm.sample(1000, tune=500, chains=2)

pm.summary(trace)18. 鲁棒回归是什么鲁棒回归方法(例如RANSAC、Huber回归)对异常值的敏感性低于普通最小二乘法。

示例用例异常值数据:拟合包含极端值的数据模型,例如金融数据。

代码片段使用sklearn.linear_model.RANSACRegressor:

import numpy as np

from sklearn.linear_model import RANSACRegressor, LinearRegression

np.random.seed(42)

X = np.random.rand(100, 1) * 10

y = 3 * X.squeeze() + 2 + np.random.normal(0, 2, 100)

# 添加异常值

X_outliers = np.array([[8], [9], [9.5]])

y_outliers = np.array([50, 55, 60])

X = np.vstack((X, X_outliers))

y = np.concatenate((y, y_outliers))

ransac = RANSACRegressor(base_estimator=LinearRegression(), max_trials=100)

ransac.fit(X, y)

print("RANSAC系数:", ransac.estimator_.coef_)

print("RANSAC截距:", ransac.estimator_.intercept_)19. Copulas是什么Copulas捕捉随机变量之间的依赖结构,与其边缘分布分开。它们在金融中常用于建模资产收益的联合分布。

示例用例投资组合风险:建模表现出非线性依赖关系的多只股票的联合行为。

代码片段使用copulas库中的高斯Copula:

!pip install copulas

import numpy as np

from copulas.multivariate import GaussianMultivariate

# 合成数据

X = np.random.normal(0, 1, (1000, 2))

X[:,1] = 0.8 * X[:,0] + np.random.normal(0, 0.6, 1000) # 相关性

model = GaussianMultivariate()

model.fit(X)

sample = model.sample(5)

print("原始相关性:", np.corrcoef(X[:, 0], X[:, 1])[0,1])

print("样本相关性:", np.corrcoef(sample[:, 0], sample[:, 1])[0,1])20. 广义加性模型(GAMs)是什么GAMs通过允许预测变量的非线性函数扩展线性模型,同时保持可加性。它们比线性回归更灵活,但仍具有可解释性。

示例用例健康数据:将患者结果建模为年龄和其他变量的平滑非线性函数。

代码片段使用pyGAM库:

!pip install pygam

import numpy as np

from pygam import LinearGAM, s

# 合成数据

np.random.seed(42)

X = np.random.rand(200, 1) * 10

y = 2 + 3*np.sin(X).ravel() + np.random.normal(0, 0.5, 200)

gam = LinearGAM(s(0)).fit(X, y)

XX = np.linspace(0, 10, 100)

preds = gam.predict(XX)

print("系数:", gam.summary())结论从理解贝叶斯推断和最大似然估计,到Copulas和GAMs等高级概念,这20种高级统计方法构成了每位数据科学家的全面工具包。这里的代码片段是简要示例,但每种方法都可以深入探索,以解决复杂的现实问题——无论是预测、推断还是建模复杂关系。

转自:数据studio

原文地址:https://medium.com/@sarowar.saurav10/20-advanced-statistical-approaches-every-data-scientist-should-know-ccc70ae4df28

作者:Sarowar Jahan Saurav

编辑:罗伯特

最后推荐一下我们团队写的量化小册的内容,48篇内容!从Python安装,入门,数据分析,爬取股票基金的历史+实时数据,以及如何写一个简单量化策略,策略回测,如何看资金曲线统统都有介绍!非常超值!

欢迎订阅:原价299 早鸟价2杯咖啡钱,即可永久阅读。现在的价格非常非常低,只要2杯奶茶,就可以终身订阅+课程源码,还有永久陪伴群。48小时无理由退款,放心食用!

相关推荐

细说汉字:泉
世界杯365体育

细说汉字:泉

📅 07-08 👁️ 4596
电信宽带升级200兆:如何进行宽带升级
365永久激活怎么做到的

电信宽带升级200兆:如何进行宽带升级

📅 06-28 👁️ 7105
十款高颜值日本便当盒,毕竟外表漂亮才能更好吃饭
tips手术能维持几年
365bet不能注册

tips手术能维持几年

📅 07-04 👁️ 7332
魔兽世界怀旧服采药225级后何处继续学习
世界杯365体育

魔兽世界怀旧服采药225级后何处继续学习

📅 07-07 👁️ 4962
详细图文安装教程,教你轻松给天猫魔安装第三方软件
365永久激活怎么做到的

详细图文安装教程,教你轻松给天猫魔安装第三方软件

📅 07-23 👁️ 3421
win10系统 wlan消失不见的几种方法(备忘)
世界杯365体育

win10系统 wlan消失不见的几种方法(备忘)

📅 07-20 👁️ 885
揭秘Java框架:从原理到实战,解锁高效编程秘诀
365bet不能注册

揭秘Java框架:从原理到实战,解锁高效编程秘诀

📅 07-03 👁️ 7654
Win11的wifi开关在哪里?如何快速开启和关闭?
世界杯365体育

Win11的wifi开关在哪里?如何快速开启和关闭?

📅 07-17 👁️ 3389