logo

交叉变量探索分析

wangzf / 2023-02-09


目录

在数据竞赛或者建模的时候,将变量的交叉分析划分为下面的三大块:

特征和标签关系分析

特征与标签的关系分析是我们最为关注的,希望可以了解到我们每个特征与标签之间的关系,依据我们的经验,

很多时候如果特征与标签存在较强的关系,那么大概率该特征是存在非常大的价值的,也就是我们说的重要的特征。 那么我们一般需要观察哪些指标呢?

标签为数值变量

回归

类别特征

关于类别变量与数值标签的关系,一般会观察下面的结果:

如果不同类别之间的标签分布相差较大,则说明该类别信息是非常有有价值的, 如果所有类别的标签都是一样的分布,则该类别信息的区分度相对较低

pandas 绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.read_csv('./data/house_train.csv') 

var = 'MSZoning'
label = 'SalePrice'
df.groupby(var)[label].mean().plot(kind = 'bar')

boxplot 绘图

import matplotlib.pyplot  as plt
import seaborn as sns
%matplotlib inline

plt.figure(figsize = [10,6])

var = 'MSZoning'
sns.boxplot(x = var, y = label, data = df)

数值特征

关于数值变量与数值标签的关系,一般会观察下面的结果:

person 相关系数

df[["LotArea", label]].corr("pearson")

scatter 绘图

import matplotlib.pyplot  as plt
%matplotlib inline

plt.figure(figsize = [10, 6])
plt.scatter(x = "LotArea", y = label, data = df)
plt.xlabel("LotArea")
plt.ylabel(label)

regplot 绘图

import matplotlib.pyplot  as plt
import seaborn as sns
%matplotlib inline

plt.figure(figsize = [10, 6])
sns.regplot(x = df["LotArea"], y = df[label])

时间特征

关于时间与数值标签,主要希望随着时间变化,数据是否表现除了某些特殊的模式(周期性等), 以及是否出现了明显的异常现象等等。时间变量与数值变量的可视化直接使用 plot 函数即可

plot 绘图

plt.figure(figsize = [10,6])

# 用 index 模拟时间
plt.plot(
    df.index, df[label].values, 
    color = 'black', 
    linestyle = '--', 
    linewidth = '1', 
    label = label
)
plt.xlabel('Time', fontsize = 14)   
plt.ylabel(label, fontsize = 16)    

statsmodels 分解

from statsmodels.tsa.seasonal import seasonal_decompose

decomposition = seasonal_decompose(ts, freq, two_sided = False)
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid
decomposition.plot()
plt.show()

标签为二元变量

二分类

类别特征

关于类别变量与二元标签的关系可以直接通过 barplot 函数进行可视化, 如果不同类之间的分布差不大,那说明该类别变量大概率是意义不大的

df = pd.read_csv('./data/titanic_train.csv') 

var = 'Pclass'
label = 'Survived'
df.groupby(var)[label].mean()

plt.figure(figsize = [10, 6])
sns.barplot(x = bar, y = label, data = df)

数值特征

数值变量与二元标签的关系一般可以通过下面的两种方式分析:

plt.figure(figsize = [10, 6])
sns.boxplot(df[label], df['Fare'])

标签为多元变量

多分类

在观测标签为多分类的问题时,因为标签是多个类别的,可以通过两种策略对其进行观察:

multi_label = 'y_generated'
df['y_generated'] = np.random.randint(low = 0.5, high = 3.5, size = df.shape[0])

类别特征

直接使用 countplot,将 hue 的位置设置为标签的名称即可

plt.figure(figsize = [10,6])
sns.countplot(x = 'Pclass', hue = multi_label, data = df)
plt.ylabel('Number of Occurrences', fontsize = 12)
plt.xlabel(multi_label, fontsize = 12)
plt.show()

数值特征

直接使用 boxplot 即可,观测在每个类处数值变量的分布情况。 如果所有类处的数值变量分布都类似,那可能该数值变量带来的影响会相对较小,反之影响较大

plt.figure(figsize = [10,6])
sns.boxplot(x = multi_label, y = 'Age', data = df)
plt.ylabel('Age distribution', fontsize = 12)
plt.xlabel(multi_label, fontsize = 12)
plt.show()

特征和特征关系分析

参考