网站怎么做才有效果阿里巴巴国际贸易网站
https://www.sohu.com/a/416398396_100103806?sec=wd
(2)数据大于±3标准差
3σ 原则是在数据服从正态分布的时候用的比较多,在这种情况下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
在数据处理的时候,按照正态分布的性质,三个标准差以外的数据都可以被看作是错误的数据从而排除掉。
import gc
train = pd.read_csv('./eloData/train.csv')
test = pd.read_csv('./eloData/test.csv
# 查看数据集规模
(train.shape, test.shape)
train.info()
#数据质量分析:判断一致性:验证训练集和测试集是否采样于同一个总体样本
#数据正确性校验,看一下数据是否独一无二cardid,多条重复数据
train["card_id"].nunique()#the number of unique返回唯一值的个数
检验训练集和测试集总体样本id是否唯一
test['card_id'].nunique()+ train['card_id'].nunique() == len(set(test['card_id'].values.tolist() + train['card_id'].values.tolist()))
#接下来查看异常值
train.describe().T
#由于我们对特征还没进行处理,所以先看标签列的异常情况,此列是连续性变量可以采用概率密度直方图进行查看分布
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
sns.histplot(train["target"],kde=True)#kde同时绘制曲线,横坐标是分数值,纵坐标是统计个数看大部分人集中在哪些区段
'''4.规律一致性分析接下来,进行训练集和测试集的规律一致性分析。所谓规律一致性,指的是需要对训练集和测试集特征数据的分布进行简单比对,以“确定”两组数据是否诞生于同一个总体,即两组数据是否都遵循着背后总体的规律,即两组数据是否存在着规律一致性。我们知道,尽管机器学习并不强调样本-总体的概念,但在训练集上挖掘到的规律要在测试集上起到预测效果,就必须要求这两部分数据受到相同规律的影响。一般来说,对于标签未知的测试集,我们可以通过特征的分布规律来判断两组数据是否取自同一总体。
单变量分析首先我们先进行简单的单变量分布规律的对比。由于数据集中四个变量都是离散型变量,因此其分布规律我们可以通过相对占比分布(某种意义上来说也就是概率分布)来进行比较。例如首先我们查看首次激活月份的相对占比分布可以通过如下代码实现:'''
#一次性对训练集和测试集的各个特征都进行分布显示
for feature in features:(train[feature].value_counts().sort_index()/train.shape[0]).plot()(test[feature].value_counts().sort_index()/test.shape[0]).plot()plt.legend(["train","test"])plt.xlabel(feature)plt.ylabel("ratio")plt.show()
#根据上图规律非常一致,则不用继续往下做了,如果不一致,可以进行联合变量分布是否一致
‘’‘能够发现,两组数据的单变量分布基本一致。
多变量联合分布
接下来,我们进一步查看联合变量分布。所谓联合概率分布,指的是将离散变量两两组合,
然后查看这个新变量的相对占比分布。例如特征1有0/1两个取值水平,特征2有A/B两个取值水平,
则联合分布中就将存在0A、0B、1A、1B四种不同取值水平,然后进一步查看这四种不同取值水平出现的分布情况。
首先我们可以创建如下函数以实现两个变量“联合”的目的:’’’
def combine_feature(df):cols = df.columnsfeature1 = df[cols[0]].astype(str).values.tolist()feature2 = df[cols[1]].astype(str).values.tolist()return pd.Series([feature1[i]+'&'+feature2[i] for i in range(df.shape[0])])#水平组合
能够发现其分布基本一致。当然我们可以通过如下代码快速致性所有两两变量联合分布的比较:
n = len(features)
for i in range(n-1):for j in range(i+1, n):cols = [features[i], features[j]]print(cols)train_dis = combine_feature(train[cols]).value_counts().sort_index()/train_counttest_dis = combine_feature(test[cols]).value_counts().sort_index()/test_countindex_dis = pd.Series(train_dis.index.tolist() + test_dis.index.tolist()).drop_duplicates().sort_values()(index_dis.map(train_dis).fillna(0)).plot()(index_dis.map(train_dis).fillna(0)).plot()plt.legend(['train','test'])plt.xlabel('&'.join(cols))plt.ylabel('ratio')plt.show()
能够发现所有联合变量的占比分布基本一致。数据集整体质量较高,且基本可以确认,训练集和测试集取自同一样本总体。
规律一致性分析的实际作用
在实际建模过程中,规律一致性分析是非常重要但又经常容易被忽视的一个环节。通过规律一致性分析,我们可以得出非常多的可用于后续指导后续建模的关键性意见。通常我们可以根据规律一致性分析得出以下基本结论:
(1).如果分布非常一致,则说明所有特征均取自同一整体,训练集和测试集规律拥有较高一致性,模型效果上限较高,建模过程中应该更加依靠特征工程方法和模型建模技巧提高最终预测效果;
(2).如果分布不太一致,则说明训练集和测试集规律不太一致,此时模型预测效果上限会受此影响而被限制,并且模型大概率容易过拟合,在实际建模过程中可以多考虑使用交叉验证等方式防止过拟合,并且需要注重除了通用特征工程和建模方法外的trick的使用;
至此,我们就完成了核心数据集的数据探索,接下来,我们还将围绕其他的补充数据进行进一步的数据解读与数据清洗,并为最终的建模工作做好相关准备。
字段 解释
merchant_id 商户id
merchant_group_id 商户组id
merchant_category_id 商户类别id
subsector_id 商品种类群id
numerical_1 匿名数值特征1
numerical_2 匿名数值特征2
category_1 匿名离散特征1
most_recent_sales_range 上个活跃月份收入等级,有序分类变量A>B>…>E
most_recent_purchases_range 上个活跃月份交易数量等级,有序分类变量A>B>…>E
avg_sales_lag3/6/12 过去3、6、12个月的月平均收入除以上一个活跃月份的收入
avg_purchases_lag3/6/12 过去3、6、12个月的月平均交易量除以上一个活跃月份的交易量
active_months_lag3/6/12 过去3、6、12个月的活跃月份数量
category_2 匿名离散特征2
‘’’
#most_recent_sales_range 上个活跃月份收入等级,有序分类变量A>B>…>E
#离散变量,有序变量,一种是有序型变量,离散,但是又明显的大小关系,后续数值转化的时候,存在大小关系,有时候会把有序
#变量看成是连续变量加入模型
#另外一种名义变量,没有大小关系,只是一种标识 例如男女1 和0 后续就是独热编码