二元分析是一种统计技术,它专注于两个变量(特征/属性)之间的关系,以揭示它们之间的经验关系。简而言之,它旨在识别超出简单相关性分析的并发关系。在监督学习中,这种方法有助于确定关键预测因子。当进行二元分析时,一个变量作为因变量(Y),其他变量作为自变量(X1, X2等),所有Y, X对都会被绘制出来。本质上,它作为一种特征选择和优先级排序的方法。例如,空调的销售量与夏季的日平均温度如何变化——在这里,可以将每日交易量与日平均温度绘制出来,以观察模式、趋势或经验关系(如果有的话)。
相关性与因果关系之间的区别在于,如果观察到一个变量随着另一个变量值的变化而变化,就认为其中一个变量“导致”另一个变量变化或导致另一个变量变化,这是一种普遍的误解。在二元分析中,可能会观察到一个变量(尤其是X)导致Y变化。然而,实际上,它可能只是一个指标,而不是真正的驱动因素。以下示例有助于理解这一概念,并在二元分析中避免这种谬误。
尽管会看到晒伤和冰淇淋销售之间存在相关性,但冰淇淋并不导致晒伤(也许它们正好相反)!在数据中有两种类型的变量——分类和连续(数值)。因此,在二元分析的情况下,可以进行的四种分析组合如下表所示:
为了进一步实践理解,以下是一个Python中每种组合的二元分析示例:
当两个被分析的变量都是分类变量时,这种情况用于分类。例如,在分类信用卡欺诈或非欺诈作为Y变量时,然后检查客户是否在家乡、外地或国外。另一个例子可能是年龄与性别,然后计算落入该类别的客户数量。重要的是要注意,在所有这类分析中,可视化/摘要显示了第三变量/指标(如收入或成本)的计数或一些数学或逻辑聚合。可以使用Crosstabs(热图)或Pivots在Python中完成。让看看下面的例子:
Crosstabs用于在类别之间计数,或获取两个类别之间的摘要。Pandas库具有此功能。
import pandas as pd
import seaborn as sns
# 需要在x和y分类变量上进行汇总
pd.crosstab(dd.categ_x, dd.categ_y, margins=True, values=dd.cust, aggfunc=pd.Series.count)
# 3任何其他聚合函数可以根据列类型使用
# 通过将上述内容包含在sns.heatmap中创建热图
sns.heatmap(pd.crosstab(dd.categ_x, dd.categ_y, margins=True, values=dd.cust, aggfunc=pd.Series.count),
cmap="YlGnBu", annot=True, cbar=False)
Pivots是另一个有用的功能,可以应用于Pandas数据框以获得类似Excel的透视表。当2个或更多分类变量放置在适当的层次结构中时,它可以工作。
Pd.pivot_table(df, index=["Manager","Status"], columns=["Product"], aggfunc=[np.sum])
这是一个连续变量的方差在类别中的示例。比如年龄在每个段中的变化,或者家庭收入和支出如何根据贷款偿还状态变化。
用于连续变量聚合的分类图:用于获取数值变量的总数或计数,例如每月的收入。
sns.barplot(x='sex', y='total_bill', data=t)
sns.countplot(x='sex', data=t)
用于连续(数值)变量分布的图:用于查看数值变量在类别中的范围和统计数据。
sns.boxplot(x='day', y='total_bill', data=t, palette='rainbow')
sns.violinplot(x="day", y="total_bill", data=t, palette='rainbow')
sns.stripplot(x="day", y="total_bill", data=t)
sns.swarmplot(x="day", y="total_bill", data=t)
这是二元分析最常见的用例,用于显示两个数值(连续)变量之间的经验关系。这在回归案例中通常更适用。
import seaborn as sns
Sns.regplot(x='a', y='b', data=df)
Plt.ylim(0,)
如果有大型数据集,有30-70+个特征(变量),可能没有足够的时间逐一运行每对变量的二元分析。在这种情况下,可以使用seaborn库中的pairplot或pair grid。它创建了一个网格,每个单元格都是一个二元图,Pairgrid还允许自定义。代码片段和样本输出如下(假设seaborn已导入,并且iris数据集)。
g = sns.pairplot(iris, diag_kind="kde", markers="+",
plot_kws=dict(s=50, edgecolor="b", linewidth=1),
diag_kws=dict(shade=True))
为什么不在这里运行相关性矩阵呢?相关性矩阵只提供一个数值,而不提供任何关于分布的信息,这提供了变量之间经验关系的深入画面。
请注意,这只适用于数值变量(对于分类变量,需要首先使用技术如独热编码将其转换为数值形式)。对于非常大的数据集,将独立变量分组为10/15/20组,然后分别与因变量进行二元分析。
使用一行代码进行EDA!pandas profiling库——一种快速进行EDA和二元分析的快捷方式——更多信息
结论:二元分析在探索性数据分析(EDA)中至关重要,特别是在模型设计期间,因为最终用户希望了解什么影响预测以及如何影响。这可以扩展到多变量案例,但人类的大脑设计容易理解2D或3D世界。在有两个变量的情况下,更容易解释、获得直觉并采取行动。因此,二元分析在定义一个特定变量与另一个变量的经验关系以及如果一个变量在特定范围或具有特定值时可以期待什么方面大有裨益。
重申一下,这(相关性)不应与因果关系混淆(在那种情况下,实验更好)。希望喜欢关于Python中二元分析的文章。
Q1. Python中的二元是什么意思?
A. Python中的二元指的是涉及两个变量的分析。它使用统计方法和可视化来探索这两个变量在数据集中的关系和交互。
Q2. 二元分析是什么,举个例子?
A. 二元分析研究两个变量之间的关系。例如,分析一个人的学习时间和考试成绩之间的相关性,以了解学习时间是否影响表现。