我们最终的目标是要打比赛、进大厂,因此在熟悉了基本模型后先来看看比赛怎么做的,本文以Elo Merchant Category Recommendation | Kaggle 为样例进行介绍。
首先注意使用kaggle要全程“科学上网”,否则在注册、下载数据等环节都会出现页面挑不出来的情况
这一部分讲数据的缺失值、异常值及样本数据一致性情况探索,具体代码如下:
 # In[1]:
 import os
 import numpy as np
 import pandas as pd
 # In[11]:
 pd.read_excel('d:/Data_Dictionary.xlsx',header=2,sheet_name='train')#读取数据,去掉头两行(空行),先看看大概数据情况
 # In[12]:
 import gc #进行内存管理的
 # In[22]:
 train=pd.read_csv('d:/train.csv')
 # In[23]:
 test=pd.read_csv('d:/test.csv')
 # In[24]:
 #数据质量分析,判断训练和验证集是否取自同一总体,从而决定是用特征工程还是trick,如果分布不一致,则在训练集上容易过拟合
 #先看数据集是否cardid独一无二
 train['card_id'].nunique()==train.shape[0]#nunique用于看不同id个数
 # In[25]:
 test['card_id'].nunique()==test.shape[0]
 # In[39]:
 train['card_id'].nunique()+test['card_id'].nunique()==len(set(train['card_id']).union(set(test['card_id'])))#判断
 # In[40]:
 train.isnull().sum()#看缺失值情况
 # In[41]:
 test.isnull().sum()
 # In[51]:
 statistics=train['target'].describe()#看统计情况,找异常值
 # In[43]:
 statics
 # In[44]:
 #连续变量用概率直方图来观察
 import seaborn as sns
 # In[45]:
 import matplotlib.pyplot as plt
 # In[46]:
 sns.set()
 # In[48]:
 sns.histplot(train['target'])#绘制密度曲线,找异常值
 # In[49]:
 #看下异常值数量,可能是特殊用户的标记,不能直接删掉
 (train['target']<-30).sum()
 # In[52]:
 #关于如何确定异常值,也可以用3倍方差准则
 statistics.loc['mean']-3*statistics.loc['std']
 # In[54]:
 #规律一致性分析:两个集合分布规律是否一致
 #先单变量分析,看每个变量在每个区间内的样本数分布图是否一致
 features=['first_active_month','feature_1','feature_2','feature_3']
 train_count=train.shape[0]
 test_count=test.shape[0]
 # In[56]:
 for feature in features:
     (train[feature].value_counts().sort_index()/train_count).plot()
     (test[feature].value_counts().sort_index()/test_count).plot()
     plt.legend(['train','test'])#画标签
     plt.xlabel(feature)
     plt.ylabel('ratio')
     plt.show()