数据科学家稳健统计系列第一部分:稳健的中心趋势度量以及...
原文towardsdatascience.com/robust-statistics-for-data-scientists-part-1-resilient-measures-of-central-tendency-and-67e5a60b8bf1https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cf43c75d8b50af4d9c13df54abeccde8.png使用 DALL-E 生成的图片统计在数据科学中的角色是核心的它将原始数据与可操作的见解联系起来。然而并非所有统计方法都是平等的尤其是在面对混乱的现实世界数据的残酷现实时。这使我们来到了稳健统计的目的这是一个旨在抵御数据异常的子领域这些异常经常使传统的统计方法偏离轨道。经典稳健统计必要的转变虽然经典统计学为我们服务得很好但它们对异常值和极端值的敏感性可能导致误导性的结论。稳健统计学应运而生旨在在更广泛的条件下提供更可靠的结果。这种方法不是关于不考虑地丢弃异常值而是关于开发对它们不太敏感的方法。稳健统计基于弹性的原则。它涉及构建统计方法这些方法在假设有微小偏差时仍保持不受影响或影响最小。这种弹性在现实世界的数据分析中至关重要因为完美分布的数据集是例外而不是常态。稳健统计学中的关键概念包括异常值、杠杆点和破坏点。异常值和杠杆点异常值是显著偏离数据集中其他观察值的观测点。在回归分析中杠杆点是指独立变量空间中的异常值它们可以过度影响模型的拟合。在这两种情况下它们的存在都可能扭曲经典统计分析的结果。例如让我们考虑一个数据集其中我们测量了小时数对考试成绩的影响。一个异常值可能是一个学习很少但得分异常高的学生而一个杠杆点可能是一个与同龄人相比学习时间异常长的学生。为了说明我们将模拟一个包含异常值和杠杆点的简单数据集并可视化它们对线性回归模型的影响。importnumpyasnpimportmatplotlib.pyplotaspltimportseabornassnsfromsklearn.linear_modelimportLinearRegressionfromscipyimportstatsfromscipy.statsimportmedian_abs_deviationdefcreate_model_add_point(x_base,y_base,pointNone):Extend base data with an optional point and fit a linear model.x,y(np.append(x_base,point[0]),np.append(y_base,point[1]))ifpointelse(x_base,y_base)modelLinearRegression().fit(x.reshape(-1,1),y)returnx,y,model# Set seed for reproducibility and simulate base datasetnp.random.seed(42)x_basenp.random.normal(5,2,30)y_base0.5*x_basenp.random.normal(0,0.5,30)# Prepare datasets with base, outlier, and leverage pointsdatasets[(x_base,y_base,LinearRegression().fit(x_base.reshape(-1,1),y_base)),# Base casecreate_model_add_point(x_base,y_base,(4,10)),# Adding an outliercreate_model_add_point(x_base,y_base,(15,10.5))# Adding a leverage point]# Plotting setupplt.rcParams.update({font.size:15})sns.set_palette(deep)fig,axesplt.subplots(2,3,figsize(18,12))titles[Original Data,With Outlier,With Leverage Point]special_points[(None,None),(4,10),(15,10.5)]palettesns.color_palette()plot_info{Original Data:{col:palette[0]},With Outlier:{col:palette[3]},With Leverage Point:{col:palette[1]}}# Plotting data points, regression lines, and special pointsfori,((x,y,model),title,(px,py))inenumerate(zip(datasets,titles,special_points)):x_valuesnp.linspace(min(x),max(x),100)y_valuesmodel.predict(x_values.reshape(-1,1))axes[0,i].scatter(x,y,colorblue,labelData Points,s100)axes[0,i].plot(x_values,y_values,colorred,labelLinear Fit,lw3)ifpxisnotNone:axes[0,i].scatter(px,py,colorplot_info[title][col],labeltitle,zorder5,s100)axes[0,i].set_title(title,fontweightbold)axes[0,i].set_xlabel(Study Hours)axes[0,i].set_ylim(-0.5,11)axes[0,i].legend()axes[0,0].set_ylabel(Exam Score)# Plotting intercepts and slopes with adapted colorsbar_colors[plot_info[title][col]fortitleintitles]intercepts[model.intercept_for_,_,modelindatasets]slopes[model.coef_[0]for_,_,modelindatasets]axes[1,0].bar(range(3),intercepts,colorbar_colors)axes[1,0].set_title(Estimated intercepts,fontweightbold)axes[1,0].set_xticks(range(3))axes[1,0].set_xticklabels(titles)axes[1,1].bar(range(3),slopes,colorbar_colors)axes[1,1].set_ylim(0.2,0.7)axes[1,1].set_title(Estimated slopes,fontweightbold)axes[1,1].set_xticks(range(3))axes[1,1].set_xticklabels(titles)# Hide the third subplot in the second row as its not neededaxes[1,2].axis(off)plt.tight_layout()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/83fb357a84397bef2db616421eb2c229.png图片由作者提供上面板中的图显示了当引入这些异常值时回归线的影响。异常值的添加会显著地将回归线向上倾斜增加其截距见左下角的条形图从而证明了异常值对模型的影响。相反杠杆点将回归线拉向自身增加估计的斜率见右下角的条形图同时减少截距可能导致对数据关系的误导性解释。破点估计量的破点是指它在产生错误结果之前可以容忍的受污染数据的比例。为了演示这个概念让我们比较在存在不断增加的异常值时均值和中位数作为中心趋势估计量的情况。# Original datadatanp.random.normal(0,1,100)# Function to introduce outliersdefintroduce_outliers(data,proportion):n_outliersint(len(data)*proportion)outliersnp.random.normal(20,5,n_outliers)# Generating outliersreturnnp.concatenate([data[:-n_outliers],outliers])proportionsnp.linspace(0,0.5,25)means[]medians[]forproportioninproportions:contaminated_dataintroduce_outliers(data,proportion)means.append(np.mean(contaminated_data))medians.append(np.median(contaminated_data))# Plottingplt.figure(figsize(10,6))plt.plot(proportions,means,labelMean,markero,linestyle--,colorpalette[3])plt.plot(proportions,medians,labelMedian,markerx,linestyle-,colorpalette[0])plt.xlabel(Proportion of Outliers)plt.ylabel(Value of Estimator)plt.title(Breakdown Point: Mean vs. Median)plt.legend()plt.grid(True)plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7e8387fd5adb8af4822e6f7f3793c522.png图片由作者提供该图显示中位数具有高破点50%这意味着在变得不可靠之前它可以处理高达 50%的数据被污染。相比之下均值的破点较低0%因为即使是单个极端异常值也会显著改变其值。总体而言上述模拟的结果强调了需要稳健的统计方法这些方法可以减轻此类异常的影响确保在现实世界场景中进行更可靠和准确的数据分析。稳健的中心趋势和分布度量https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/615bc66ee1929cf2c332d62584f4786a.png图片由 Billy Huynh 在 Unsplash 提供异常值可以显著扭曲从传统的中心趋势度量如均值和标准差获得的结果。让我们深入了解一些稳健的度量它们可以提供数据中心趋势和分布的更清晰图景。稳健的中心趋势度量中位数中位数是一种稳健的中心趋势度量它将数据集分成两个相等的部分。与均值不同它不受极端值的影响因此在存在异常值的情况下是一个可靠的度量。Trimmed 均值Trimmed 均值通过在计算均值之前从数据集中移除一定百分比的最低和最高值来增强稳健性。这个过程减少了异常值的影响。Winsorized 均值Winsorized 均值也旨在减少异常值的影响但它通过用数据中的最近值替换极端值来实现而不是删除它们。这种方法保持了原始数据集的大小。让我们创建一个包含异常值的合成数据集并说明这些稳健的度量与传统均值相比如何。# Creating a synthetic dataset with outliersnp.random.seed(0)datanp.random.normal(50,15,100)# Normal distributiondatanp.append(data,[200,220,250])# Adding outliers# Calculating measuresmeannp.mean(data)mediannp.median(data)trimmed_meanstats.trim_mean(data,0.1)winsorized_meanstats.mstats.winsorize(data,limits[0.1,0.1]).mean()# Plotting the histogram and measuresplt.figure(figsize(10,6))plt.hist(data,bins30,colorskyblue,alpha0.7,labelData Distribution)plt.axvline(mean,colorred,linestyle--,linewidth2,labelMean)plt.axvline(median,colorgreen,linestyle-,linewidth2,labelMedian)plt.axvline(trimmed_mean,colorblue,linestyle-.,linewidth2,labelTrimmed Mean)plt.axvline(winsorized_mean,colorpurple,linestyle:,linewidth2,labelWinsorized Mean)plt.title(Comparison of Central Tendency Measures)plt.xlabel(Value)plt.ylabel(Frequency)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/74633e46c18315589d9ceecbd44082bd.png图片由作者提供在上述示例中我们生成了一个正态分布并引入了一些极端异常值来模拟一个现实场景。然后我们计算了均值、中位数、截尾均值和 Winsorized 均值。数据的直方图以及代表每个度量的垂直线说明了中位数、截尾均值和 Winsorized 均值相对于传统均值受异常值影响较小。中位数保持在数据的中心而截尾和 Winsorized 均值调整以提供更准确的中心趋势表示比受异常值扭曲的均值更接近中位数。稳健分散度度量稳健分散度度量如中位数绝对偏差MAD和四分位数范围IQR在理解数据集中的变异性方面至关重要尤其是在数据包含异常值时。中位数绝对偏差 (MAD)MAD 是一个稳健的单变量样本变异性的度量。它被计算为数据集中位数与绝对偏差的中位数。这一度量给出了数据分布范围的概念并且由于它依赖于中位数而不是均值因此受异常值的影响较小。# Generating a dataset with outliersnp.random.seed(0)datanp.random.normal(0,1,100)# Normal distributiondatanp.append(data,[5,5,-5,-5])# Adding outliers# Calculating the MADmadmedian_abs_deviation(data)# Plotting the data and MADplt.figure(figsize(10,6))plt.hist(data,bins30,colorskyblue,alpha0.7,labelData Distribution)plt.axvline(np.median(data),colorgreen,linestyle-,linewidth2,labelMedian)plt.axvline(np.median(data)mad,colorred,linestyle--,linewidth2,labelMAD)plt.axvline(np.median(data)-mad,colorred,linestyle--,linewidth2)plt.title(Median Absolute Deviation (MAD))plt.xlabel(Value)plt.ylabel(Frequency)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0a02d2c0c4169544039971f1398f9d55.png作者图片在这里中位数由实线标记MAD 由中位数两侧的虚线表示指示数据围绕中位数的分布范围。四分位数范围 (IQR)IQR 衡量数据集中第一四分位数25 百分位数和第三四分位数75 百分位数之间的范围本质上覆盖了数据点的中间 50%。由于它不受极端值或异常值的影响IQR 是一个稳健的分散度度量。# Calculating the IQRq1,q3np.percentile(data,[25,75])iqrq3-q1# Plotting the data and IQRplt.figure(figsize(10,6))plt.hist(data,bins30,colorskyblue,alpha0.7,labelData Distribution)plt.axvline(q1,colorblue,linestyle--,linewidth2,labelQ1)plt.axvline(q3,colorred,linestyle--,linewidth2,labelQ3)plt.title(Interquartile Range (IQR))plt.xlabel(Value)plt.ylabel(Frequency)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c1f819b6e0679d4c1fb99fbc6a83459d.png作者图片在这个直方图中第一四分位数Q1和第三四分位数Q3由虚线标记。这些线之间的区域代表 IQR覆盖了数据的中心 50%突出了受异常值影响较小的分布范围。总结来说MAD 和 IQR 都提供了在存在异常值的情况下对数据变异性的弹性估计使它们成为稳健统计分析不可或缺的工具。选择正确工具的挑战和考虑因素https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0cb3ced026eebe4bdf1ceb52c1fbe5ad.png由 Barn Images 在 Unsplash 提供的照片虽然稳健统计提供了强大的解决方案但它们并不适用于所有场景。数据分布的性质和具体的研究目标需要定制化的方法。以下是一个简明的指南以帮助您进行这一选择过程。中位数使用时机适用于偏斜分布或数据包含异常值的情况。在有序数据或当测量中心位置比平均值更重要时很有用。极限不利用所有数据点这可能导致信息丢失尤其是在无异常值的对称分布中。对于需要均值值的进一步统计分析如计算方差来说不太有用。截尾均值何时使用适用于存在异常值的数据但在此情况下均值仍比中位数更受青睐以保留更多数据集的信息。在几乎对称的分布且有极端异常值时有效。极限截尾百分比的选取可能是主观的并显著影响结果。如果截尾百分比选择不当仍可能受异常值的影响。Winsorized Mean何时使用适用于存在异常值的分布尤其是当数据点不应丢弃但需要控制极端值时。当样本量小且保留每个数据点很重要时很有用。极限与截尾均值类似Winsorization 的极限选择可以是任意的并会影响结果。如果 Winsorization 百分比过高可能会引入偏差尤其是在偏斜分布中。一般建议对称分布且无异常值通常均值和标准差就足够了。偏斜分布或存在异常值中位数、截尾均值或 Winsorized 均值更可靠。中位数非常稳健但对数据的小变化不太敏感使其适合高度偏斜的分布。截尾和 Winsorized 均值提供了一个折衷方案减少了异常值的影响同时比中位数保留了更多数据信息。探索性数据分析从中位数和 M 范数开始可以提供一个快速、对异常值有抵抗力的数据概览。如果数据看起来主要是对称且无异常值则可以使用均值和标准差进行更详细的分析。最终分析考虑分布和异常值的存在。在许多情况下结合多种指标可以提供最全面的理解例如报告均值和中位数或在使用传统指标进行比较的同时使用稳健估计量。总结选择指标应基于数据的特征和分析的具体目标。通常探索多个指标以全面了解数据的中心趋势和离散程度是有益的。前瞻性稳健的相关性、回归和高级稳健方法。本介绍为数据科学中的稳健统计实践奠定了基础。在下一教程中我们将探讨分析变量之间关系的方法即使在存在异常值的情况下。那里见
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477309.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!