适用于数据科学家的稳健统计第二部分:变量之间关系的弹性度量

张开发
2026/6/9 14:16:38 15 分钟阅读
适用于数据科学家的稳健统计第二部分:变量之间关系的弹性度量
原文towardsdatascience.com/robust-statistics-for-data-scientists-part-2-resilient-measures-of-relationships-between-variables-a59b37a6907fhttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f0bd9ba01a95364d34388ca65533fb83.png使用 DALL-E 生成的图像理解变量之间的相互联系对于做出数据驱动决策至关重要。当我们准确评估这些联系时我们增强了我们发现的可信度和合法性这在学术和实践环境中都至关重要。数据科学家经常转向皮尔逊相关系数和线性回归来探测和测量变量关系。这些方法假定数据正态性、独立性以及一致的分布或同方差性并且在满足这些条件时表现良好。然而现实世界的数据场景很少是理想的。它们通常受到噪声和异常值的影响这些异常值可能会扭曲传统统计技术的结果导致错误的结论。本文是我们关于稳健统计系列的第二篇旨在通过深入研究稳健的替代方案来克服这些障碍即使在数据不规则的情况下也能促进更可靠的见解。如果您错过了第一部分适用于数据科学家的稳健统计第一部分中央趋势的弹性度量及…传统方法的陷阱皮尔逊相关系数是一种统计方法旨在捕捉两个连续变量之间关联的程度使用一个范围从-1表示完全的负相关到1表示完全的正相关其中中性点 0 表示不存在任何可识别的关系的量表。此方法假定所讨论的变量遵循正态分布并保持线性关系。然而值得注意的是皮尔逊相关系数对异常值非常敏感异常值可能会显著扭曲估计的相关系数导致对关系强度或缺乏的潜在误导性描述。另一方面线性回归试图通过构建一个与观察到的数据密切相关的线性方程来界定因变量与一个或多个自变量之间的关系。通过最小二乘法估计系数的过程特别容易受到异常值的影响。这样的异常值有可能不当地影响回归线影响斜率和截距估计的准确性从而导致变量关系的描述失真。为了提供一个更具体的例子让我们回顾一个简单的数据集类似于我们在稳健方法讨论的第一部分中使用的数据集它描述了学生群体中学习时长与考试成绩之间的关系。通常观察到一种一致的趋势即学习时间的增加与考试成绩的提高相关。然而可能存在一些偏离这一规范的情况例如一个学生在考试期间因病学习时间异常长但考试成绩却异常低。在接下来的模拟中我们将更详细地探讨这一场景首先通过检查异常值在线性回归分析中引入的扭曲然后通过评估其对皮尔逊相关性的影响从而全面了解这种异常值如何影响统计数据解释。importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspdfromscipy.statsimportpearsonr,spearmanr,kendalltaufromsklearn.linear_modelimport(LinearRegression,HuberRegressor,RANSACRegressor,TheilSenRegressor)importstatsmodels.apiassm# Seed for reproducibilitynp.random.seed(0)# Simulating study hours and exam scoresstudy_hoursnp.random.normal(5,2,100)exam_scores10study_hours*3np.random.normal(0,5,100)# Introducing an outlierstudy_hours[98]15# Unusually high study hoursexam_scores[98]20# Disproportionately low score# Plotting the dataplt.figure(figsize(10,6))plt.scatter(study_hours[:-1],exam_scores[:-1],colorskyblue,alpha0.7,labelData Points,s50)# Normal data pointsplt.scatter(study_hours[98],exam_scores[98],colorred,labelOutlier,edgecolorblack,s50)# Outlierplt.xlabel(Study Hours)plt.ylabel(Exam Scores)plt.title(Study Hours vs. Exam Scores with Outlier)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/59934c16a8b3779ee94218d2c1148bc5.png作者提供的图像上图突出了一个异常值它偏离了观察到的学习时间与考试成绩之间主要呈线性关系。为了阐明这个异常值产生的影响我们将对包含和排除这个异常数据点的数据集应用皮尔逊相关系数。这种比较分析旨在揭示单个异常值如何扭曲学习时长与考试成绩之间关系的感知强度可能导致对这种关联真实性质的误导性结论。# Remove the outlier for the comparisonstudy_hours_wo_outliernp.delete(study_hours,98)exam_scores_wo_outliernp.delete(exam_scores,98)# Calculate Pearsons correlation with and without the outliercorr_coef_with_outlier,_pearsonr(study_hours,exam_scores)corr_coef_wo_outlier,_pearsonr(study_hours_wo_outlier,exam_scores_wo_outlier)# Create a table for comparisoncomparison_tablepd.DataFrame({Metric:[Pearsons Correlation],With Outlier:[corr_coef_with_outlier],Without Outlier:[corr_coef_wo_outlier]})comparison_tablehttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e5bb15f63ef7e27acf62cb463ddfbbf8.png作者提供的图像当包含异常值进行分析时皮尔逊系数显示出学习时长与考试成绩之间的相关性减弱没有准确反映大部分数据点之间明显更强的关系。这种差异突出了皮尔逊相关系数对数据集中异常值的敏感性。接下来我们将探讨这个异常值对简单线性回归模型的影响。通过将异常值纳入数据集并应用线性回归我们旨在观察这个单一异常数据点如何影响回归线可能改变估计的斜率和截距从而影响学习时长与考试成绩之间关系的研究。这次检查将揭示线性回归在存在异常值时的鲁棒性及其对数据分析的影响。# Reshape data for sklearnXstudy_hours.reshape(-1,1)yexam_scores# Linear regression with all data pointsmodel_with_outlierLinearRegression()model_with_outlier.fit(X,y)predictions_with_outliermodel_with_outlier.predict(X)# Remove the outlier for the second modelmasknp.arange(len(X))!98# Create a mask to filter out the outlierX_without_outlierX[mask]y_without_outliery[mask]# Linear regression without the outliermodel_without_outlierLinearRegression()model_without_outlier.fit(X_without_outlier,y_without_outlier)predictions_without_outliermodel_without_outlier.predict(X)# Plotting the data pointsplt.figure(figsize(10,6))plt.scatter(study_hours[:-1],exam_scores[:-1],colorskyblue,alpha0.6,labelData Points,s50)plt.scatter(study_hours[98],exam_scores[98],colorred,labelOutlier,edgecolorsblack,s50)# Plotting regression linesplt.plot(study_hours,predictions_with_outlier,colorred,labelRegression with Outlier)plt.plot(study_hours,predictions_without_outlier,colorblue,labelRegression without Outlier,linestyle-)plt.xlabel(Study Hours)plt.ylabel(Exam Scores)plt.title(Linear Regression with and without Outlier)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9a4bef2aba8d131748e1d46555f39206.png作者提供的图像该图突出了异常值如何极大地影响线性回归模型导致单个异常数据点移动红色回归线并可能扭曲数据集中核心关系的解释。稳健相关系数https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3a6cdee608349f5e8103af577800b875.png由Luis Santoyo在Unsplash上的照片为了减轻异常值在相关分析中的影响可以采用更具弹性的统计方法例如 Spearman 等级相关和 Kendall 的 Tau。Spearman 等级相关评估两个变量之间的关联在多大程度上可以通过单调函数来建模优先考虑数据点的排名而不是它们的实际数值。这种方法通过关注数据点的相对位置来减少异常值的不当影响从而为存在异常值的数据库中传统的相关评估提供了一个更稳健的替代方案。Kendall 的 Tau另一种非参数方法也衡量两个变量之间关联的强度和方向。它通过评估两个随机选择的数据对在一致顺序和不一致顺序中的可能性差异来实现这一点从而提供了一个对变量之间关系一致性的细微视角不受可能损害其他统计分析的极端值的影响。为了验证这些方法在异常值面前的鲁棒性我们将应用 Spearman 等级相关和 Kendall 的 Tau 来关联学习时间和考试成绩。通过比较这些分析得到的结果与皮尔逊相关得到的结果我们可以更好地欣赏这些替代方法在保持其可靠性方面的弹性即使在数据中存在异常值时也是如此。spearman_corr_with_outlier,_spearmanr(study_hours,exam_scores)spearman_corr_wo_outlier,_spearmanr(study_hours_wo_outlier,exam_scores_wo_outlier)kendall_corr_with_outlier,_kendalltau(study_hours,exam_scores)kendall_corr_wo_outlier,_kendalltau(study_hours_wo_outlier,exam_scores_wo_outlier)# Create a table for comparisoncomparison_tablepd.DataFrame({Metric:[Pearsons Correlation,Spearmans Correlation,Kendalls Tau],With Outlier:[corr_coef_with_outlier,spearman_corr_with_outlier,kendall_corr_with_outlier],Without Outlier:[corr_coef_wo_outlier,spearman_corr_wo_outlier,kendall_corr_wo_outlier]})comparison_tablehttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8a5ad40dc2fcfc2d5eaa50d4a47a3d08.png作者的照片表格中展示的数据表明引入异常值导致所有三个相关系数都下降与皮尔逊相关相比Spearman 和 Kendall 的 Tau 显示出相对较小的变化。这表明它们对异常值的抵抗力更强强调了在分析中使用这些鲁棒方法的重要性尤其是在处理包含无法轻易排除的异常值的数据库时。尽管与另外两个指标相比Kendall 的 Tau 的统计能力通常较低但其变化较小进一步强调了这些非参数度量对异常数据点影响的鲁棒性。坚固回归技术https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1f57b9151fe12b43fbc4a4575a12eb74.png由Salah Ait Mokhtar在Unsplash上的照片当线性回归估计受到异常值的影响时采用鲁棒的替代方案如 Huber 回归和分位数回归可以提供更可靠的结果。Huber 回归通过修改损失函数有效地减少了异常值的影响对于接近模型预测的数据点采用平方损失而对于显著偏离的数据点采用绝对损失。与此相反分位数回归将重点转向估计响应变量的中位数或其他分位数而不是均值。这种方法提供了对可能结果及其相关概率的更广泛视角为分布的尾部提供了见解其中异常值通常存在。为了评估这些方法的有效性我们将应用 Huber 回归和分位数回归来建模考试成绩与学习时间之间的关系随后将它们的结果与传统线性回归得到的结果进行比较。# Function for Quantile Regressiondefquantile_regression(X,y,quantile):modelsm.QuantReg(y,sm.add_constant(X))fitted_modelmodel.fit(qquantile)predictionsfitted_model.predict(sm.add_constant(X))returnpredictions# Reshape data for sklearnXstudy_hours.reshape(-1,1)yexam_scores# Huber Regression with all data pointshuber_model_with_outlierHuberRegressor()huber_model_with_outlier.fit(X,y)huber_predictions_with_outlierhuber_model_with_outlier.predict(X)# Huber Regression without the outlierX_without_outlierX[mask]y_without_outliery[mask]huber_model_without_outlierHuberRegressor()huber_model_without_outlier.fit(X_without_outlier,y_without_outlier)huber_predictions_without_outlierhuber_model_without_outlier.predict(X_without_outlier)# Quantile Regression with all data pointsquantile_predictions_with_outlierquantile_regression(X.ravel(),y,0.5)# Quantile Regression without the outlierquantile_predictions_without_outlierquantile_regression(X_without_outlier.ravel(),y_without_outlier,0.5)# Plottingplt.figure(figsize(10,6))plt.scatter(study_hours[:-1],exam_scores[:-1],colorskyblue,alpha0.6,labelData Points,s50)plt.scatter(study_hours[98],exam_scores[98],colorred,labelOutlier,edgecolorsblack,s50)# Plotting ground truthplt.plot(study_hours,predictions_without_outlier,colorblack,labelGround truth,linestyle--)# Plotting regression with outlierplt.plot(study_hours,predictions_with_outlier,colorred,labelRegression with Outlier)# Plotting Huber regression linesplt.plot(study_hours,huber_predictions_with_outlier,colorblue,labelHuber with Outlier)# Plotting Quantile regression linesplt.plot(study_hours,quantile_predictions_with_outlier,colororange,labelQuantile with Outlier)plt.xlabel(Study Hours)plt.ylabel(Exam Scores)plt.title(Huber and Quantile Regression vs Linear Regression)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/bad0ee9989ade3013344bbaea2352976.png作者提供的图片在上图所示的图中拟合到无异常值数据的线性回归模型虚线黑色线可以被视为“真实情况”的代理并作为其他模型可以与之比较的基准。值得注意的是Huber 回归和分位数回归的回归线似乎未受异常值的影响与“真实情况”线紧密一致。这表明它们的鲁棒性和抵抗异常值偏斜效应的能力。为了比较目的还包括了包含异常值的线性回归模型用红色表示。这种斜率的对比突出了标准线性回归模型中由异常值引起的显著偏差并强调了 Huber 回归和分位数回归处理异常值的有效性。高级稳健回归技术https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4405017722606b433ce1843e3a68343c.png由Alan Bowman在Unsplash上提供的照片虽然 Huber 回归对于轻微的异常值是有效的但当面对具有大量异常值或特别极端异常值的数据库时其性能可能会下降。这种限制源于其损失函数它是分段鲁棒的这意味着它在一定阈值内提供鲁棒性超过这个阈值其有效性可能会降低。另一方面分位数回归在应对响应变量的异常值方面表现出韧性但在充分处理预测变量或独立变量中的异常值方面却有所不足。为了有效地处理更具挑战性的异常值场景需要使用像 RANSAC随机样本一致性和 Theil-Sen 估计器这样的高级稳健技术。这些方法旨在提供处理各种异常条件的能力使它们适用于传统稳健方法失效的数据集。为了探索这些高级技术的功能我们将首先模拟包含依赖变量和独立变量中极端异常值的数据。这个模拟数据集将提供一个测试平台以展示 RANSAC 和 Theil-Sen 如何有效地处理复杂的异常值场景。# Simulating study hours and exam scoresstudy_hoursnp.linspace(0,20,100)exam_scores3*study_hoursnp.random.normal(10,5,sizestudy_hours.shape)# Add outliers in both dependent and independent variablesstudy_hours_outliersnp.linspace(45,50,20)exam_scores_outliers2*(study_hours_outliers-45)np.random.normal(0,5,sizestudy_hours_outliers.shape)study_hours_with_outliernp.concatenate([study_hours,study_hours_outliers])score_with_outliernp.concatenate([exam_scores,exam_scores_outliers])# Plot the datasetplt.figure(figsize(10,6))plt.scatter(study_hours,exam_scores,colorskyblue,alpha0.6,labelData Points,edgecolorblack,s50)plt.scatter(study_hours_outliers,exam_scores_outliers,colorred,labelOutliers,edgecolorblack,s50)plt.xlabel(Study Hours)plt.ylabel(Exam Scores)plt.title(Simulated Dataset with Extreme Outliers in the Dependent and Indepented Variable)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e2c22dab5c2912c571fe6ea5daf650a3.png作者图片RANSAC 回归是数据科学和计算机视觉中广泛使用的关键技术因为它在区分内点与假设模型一致的数据点和异常值方面的有效性。RANSAC 基于一个简单而有效的原则它迭代地选择原始数据集的一个随机子集假设这个子集仅包含内点以估计模型参数。每次迭代都涉及将模型拟合到这个随机子集然后评估该模型与整个数据集以确定在指定容差水平内符合模型的数据点数量——这些被识别为内点。获得最广泛共识的模型即内点数量最高的模型被采用作为最佳模型。相反Theil-Sen 估计器代表了一种稳健的非参数方法用于推断二维数据点集合中的斜率。Theil-Sen 估计器方法的核心在于计算数据集中每对可能点的斜率随后从这些斜率中得出中位数作为斜率估计。由于中位数对极端值具有内在的稳健性因此将其作为集中趋势的度量提供了对异常值的强大抵抗力。从理论转向应用我们现在将深入研究处理受众多和明显异常值污染的数据的实践。我们的探索从 RANSAC 回归和 Huber 回归之间的比较分析开始旨在说明它们在处理严重异常值异常方面的不同方法和各自的效率。# RANSAC RegressionransacRANSACRegressor()ransac.fit(study_hours_with_outlier.reshape(-1,1),score_with_outlier)# Huber Regressionhuber_model_with_outlierHuberRegressor()huber_model_with_outlier.fit(study_hours_with_outlier.reshape(-1,1),score_with_outlier)huber_predictions_with_outlierhuber_model_with_outlier.predict(study_hours_with_outlier.reshape(-1,1))# Predict and plotplt.figure(figsize(10,6))plt.scatter(study_hours,exam_scores,colorskyblue,alpha0.6,labelData Points,edgecolorblack,s50)plt.scatter(study_hours_outliers,exam_scores_outliers,colorred,labelOutliers,edgecolorblack,s50)plt.plot(study_hours_with_outlier,ransac.predict(study_hours_with_outlier.reshape(-1,1)),g,labelRANSAC Fit)plt.plot(study_hours_with_outlier.reshape(-1,1),huber_predictions_with_outlier,colorblue,labelHuber Fit)plt.xlabel(Study Hours)plt.ylabel(Exam Scores)plt.title(RANSAC Regression vs Huber Regression)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8a2ba47d7c352cb17d1535530d575585.png作者图片上图展示了 RANSAC 回归绿色线在存在众多和极端异常值的情况下准确拟合数据的能力。这与传统的稳健方法如 Huber 回归蓝色线形成对比后者在如此明显的异常值中难以准确描绘潜在的数据趋势。接下来我们将关注 Theil-Sen 估计器以评估其在异常值丰富的场景中的性能并比较其与分位数回归的有效性。我们将探讨这种非参数方法如何应对异常值带来的挑战以及其结果与分位数回归得出的结果如何对比。# Theil-Sen Estimatortheil_senTheilSenRegressor(random_state42)theil_sen.fit(study_hours_with_outlier.reshape(-1,1),score_with_outlier)# Quantile Regressionquantile_predictions_with_outlierquantile_regression(study_hours_with_outlier.ravel(),score_with_outlier,0.5)# Plottingplt.figure(figsize(10,6))plt.scatter(study_hours,exam_scores,colorskyblue,alpha0.6,labelData Points,edgecolorblack,s50)plt.scatter(study_hours_outliers,exam_scores_outliers,colorred,labelOutliers,edgecolorblack,s50)plt.plot(study_hours_with_outlier,theil_sen.predict(study_hours_with_outlier.reshape(-1,1)),b,labelTheil-Sen Fit)# Plotting Quantile regression linesplt.plot(study_hours_with_outlier.ravel(),quantile_predictions_with_outlier,colororange,labelQuantile Regression Fit)plt.xlabel(Study Hours)plt.ylabel(Exam Scores)plt.title(Theil-Sen Estimator vs Quantile Regression)plt.legend()plt.show()https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4622be98154e1f6fb7c28bc109d7e655.png作者提供的图片Theil-Sen 估计器的性能符合预期仅对异常数据点有最小的影响其韧性类似于之前讨论的 RANSAC 回归。相比之下当面对显著的异常值时分位数回归在准确建模学习时间与考试成绩之间的基本关系方面似乎能力不足。总结来说RANSAC 和 Theil-Sen 估计技术都是针对含有大量异常值的数据集进行模型拟合的稳健且有效的方法。它们能够辨别并减轻这些异常值的影响对于数据科学家和分析人员来说是无价之宝确保了底层数据趋势的完整性和准确表示即使在复杂的分析场景中也是如此。选择正确工具的挑战和考虑因素https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6d1b3923995de9166f2cf8d6adcc30f1.pngAdam Sherez 在Unsplash上的照片选择合适的统计方法来分析变量关系尤其是在存在异常值的情况下需要对每种技术的优势和局限性进行仔细评估。本指南旨在阐明选择稳健方法的关键考虑因素阐明它们的理想应用和潜在限制。Spearman 的秩相关何时使用:最适合用于偏离正态分布或变量之间具有单调但非严格线性关系的非参数数据。它特别适用于具有序数属性或排名的数据。当数据具有序数特征或已排序时使用。限制:虽然比皮尔逊相关系数对异常值更稳健但 Spearman 的有效性在面对众多并列排名时可能会减弱这可能会扭曲相关系数。Kendall 的τ系数何时使用:适用于小数据集或当需要详细检查排名一致性时。它在处理序数数据和评估变量关联性方面表现出色而不需要假设它们的分布。限制:对偶比较的特性使得它在处理大数据集时计算量较大其可解释性可能不如皮尔逊或斯皮尔曼相关系数那样直接。Huber 回归何时使用:对于主要表现为良好行为数据但包含一些异常值的线性模型来说非常理想尤其是当这些异常值不是过于极端且基本关系是线性的情况下。限制随着异常值比例或极端程度的增加其有效性会减弱。准确设置调整参数 delta 是关键但可能具有挑战性。分位数回归何时使用在理解依赖变量的条件分布方面很有用而不是仅仅了解其平均值。有助于捕捉异常值对不同分位数的影响并提供了对潜在结果的更全面看法。限制与线性回归相比解释和沟通可能更为复杂。选择用于分析的分位数通常需要特定领域的知识。RANSAC何时使用非常适合于异常值较多的数据集旨在对遵循一定结构的数据子集进行建模。其适应性扩展到线性和非线性模型。限制其有效性取决于参数选择例如迭代次数和内点识别阈值。随机性质可能导致结果的可变性需要多次迭代才能获得一致的结果。Theil-Sen 估计量何时使用特别适用于数据集中存在显著异常值时的线性模型。作为一种非参数方法它不假设特定的数据分布从而扩大了其适用性。限制由于其所有对计算斜率的计算对于大数据集此方法可能计算密集。虽然稳健但在无异常值的情况下它可能不会与参数方法表现相当。结论选择统计技术必须以对每种方法的独特能力和限制的复杂理解为依据针对手头数据集的特征和特定的研究问题进行定制。在决定最合适的分析方法时考虑数据集的属性、提出的确切问题以及关于数据的基本假设至关重要。通常采用涉及测试各种方法并比较其结果的多方面策略可以揭示深刻的见解有助于识别特定分析情境中最合适的技巧。这一探索和比较的迭代过程不仅增强了分析的稳健性而且丰富了研究者的工具箱使他们能够以更高的精度和信心应对各种数据挑战。前瞻性展望高级稳健统计方法在即将到来的教程中我们将深入探索稳健统计技术的尖端领域这些技术专门针对复杂的数据相关挑战。本系列的最后一部分将聚焦于高破坏点策略、稳健的多变量分析方法以及时间序列分析中的弹性技术深入探讨它们的用法和执行过程。通过结合基于 Python 的案例研究本部分旨在展示这些复杂方法的实际应用并赋予你必要的技能以增强你在数据异常和异常值带来的复杂性中统计分析的稳健性和精确性。

更多文章