文章目录
1. 理论基础
1.1 变量识别
变量识别就是对数据从变量类型、数据类型等方面进行分析,常见的我们可以分为:
- 特征变量、标签(目标)变量
- 自变量、因变量
- 连续型变量、类别型变量
1.2 变量分析
1.2.1 单变量分析
对于连续型变量,需要统计数据的中心分布趋势和变量的分布。
对于类别型变量,一般使用频次或占比表示每一个类别的分布情况,对应的衡量指标分别是类别变量的频次和频率(占比),可以用柱形图来表示可视化分布情况。
1.2.2 多变量分析
多变量分析可以发现变量之间的关系。
通常我们可以对多个变量之间可以分析共线性关系、相关性关系、线性关系、非线性关系。
1.2.3 缺失值、异常值处理
影响训练结果的脏数据比如缺失值、异常值、噪声等非正常的数据,我们可以适当的根据场景进行处理。
比如对于缺失值的处理,我们可以根据情况进行删除、给默认值、均值、预测的值等等处理。
对于异常的值:通常讲偏离整个样本总体的观测值称为异常值,我们有多种方法进行检测,比如箱线图处理、直方图、散点图等等可视化的方式进行检测。异常值的处理一般采用删除、转换、填充、区别对待等方法进行处理。
1.2.4 变量转换
经过适当的数据转换后,模型的效果常常有很明显的提升。–这个在比赛中后期尤为关键,数据层面算法层面大家优化的差不多的了,后面就是从特征上发力。
而由于原始数据比如区间型变量的分布不光滑(或有噪声)、不对称分布,也使得数据转化/特征转化成为一种必需的技术手段。
衍生变量
- 产生更加具有商业意义的新变量
- 衍生变量的产生在于业务熟悉程度和对项目思路的掌控程度
- 记住下面一个例子
改善变量分布的转换
区间型变量原始的分布状态偏差都较大,而且严重不对称,这种问题非常干扰模型的拟合,且影响模型的效果和效率,但可以通过各种数据转换,使得自变量的分布呈现(或者近似)正太分布,那么对于对于模型的拟合常常会有明显的提升,且转换后的变量预测性能和准确率也能得到提升。
重新改变量纲后:
分箱操作(特征离散化)
目的
- 努力提升自变量的预测能力
- 强化自变量与因变量的相关性
连续型特征离散化 (有聚类算法)
特征离散化相关算法:
无监督: 聚类;等宽;等频法
有监督: 基于信息熵的方法;基于卡方的方法
另一种表达:
连续型特征离散化
离散化原因:
1、离散化特征算法模型需要:
比如逻辑回归、决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。
2、离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
比如薪水
3、可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定
数据的标准化
使得不同的变量统一量纲,可以有平等分析和比较的基础
1.2.5 筛选有效变量
主要是解决1. 共线性问题 2.过拟合问题 3. 效率问题
筛选算法:皮尔逊相关性算法; R^2
皮尔逊相关性算法
R平方
使用多元回归的分析算法来判断和选择对目标变量有重要预测意义及价值的自变量
SSE:误差平方和
SST: 总和方差
SSR: 回归偏差
SST = SSE + SSR
公式记忆:
R^2 = 1- 误差平方和/总的方差
1- 误差和/方差和
卡方检验
IO、WOE
pass
PCA
pass
建模算法
直接RF, XGBOOST
2. 赛题数据探索
2.1 信息查看与统计
查看训练集;测试集:
import numpy as np
import pandas as pd
train_file = "./zhengqi_train.txt"
test_file = "./zhengqi_test.txt"
train_data = pd.read_csv(train_file, sep='\t', encoding = 'utf-8')
test_data = pd.read_csv(test_file, sep='\t', encoding = 'utf-8')
# train_data.info()
test_data.info()
训练集:
RangeIndex: 2888 entries, 0 to 2887
Data columns (total 39 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 V0 2888 non-null float64
1 V1 2888 non-null float64
2 V2 2888 non-null float64
3 V3 2888 non-null float64
4 V4 2888 non-null float64
5 V5 2888 non-null float64
6 V6 2888 non-null float64
7 V7 2888 non-null float64
8 V8 2888 non-null float64
9 V9 2888 non-null float64
10 V10 2888 non-null float64
11 V11 2888 non-null float64
12 V12 2888 non-null float64
13 V13 2888 non-null float64
14 V14 2888 non-null float64
15 V15 2888 non-null float64
16 V16 2888 non-null float64
17 V17 2888 non-null float64
18 V18 2888 non-null float64
19 V19 2888 non-null float64
20 V20 2888 non-null float64
21 V21 2888 non-null float64
22 V22 2888 non-null float64
23 V23 2888 non-null float64
24 V24 2888 non-null float64
25 V25 2888 non-null float64
26 V26 2888 non-null float64
27 V27 2888 non-null float64
28 V28 2888 non-null float64
29 V29 2888 non-null float64
30 V30 2888 non-null float64
31 V31 2888 non-null float64
32 V32 2888 non-null float64
33 V33 2888 non-null float64
34 V34 2888 non-null float64
35 V35 2888 non-null float64
36 V36 2888 non-null float64
37 V37 2888 non-null float64
38 target 2888 non-null float64
dtypes: float64(39)
memory usage: 880.1 KB
测试集:
RangeIndex: 1925 entries, 0 to 1924
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 V0 1925 non-null float64
1 V1 1925 non-null float64
2 V2 1925 non-null float64
3 V3 1925 non-null float64
4 V4 1925 non-null float64
5 V5 1925 non-null float64
6 V6 1925 non-null float64
7 V7 1925 non-null float64
8 V8 1925 non-null float64
9 V9 1925 non-null float64
10 V10 1925 non-null float64
11 V11 1925 non-null float64
12 V12 1925 non-null float64
13 V13 1925 non-null float64
14 V14 1925 non-null float64
15 V15 1925 non-null float64
16 V16 1925 non-null float64
17 V17 1925 non-null float64
18 V18 1925 non-null float64
19 V19 1925 non-null float64
20 V20 1925 non-null float64
21 V21 1925 non-null float64
22 V22 1925 non-null float64
23 V23 1925 non-null float64
24 V24 1925 non-null float64
25 V25 1925 non-null float64
26 V26 1925 non-null float64
27 V27 1925 non-null float64
28 V28 1925 non-null float64
29 V29 1925 non-null float64
30 V30 1925 non-null float64
31 V31 1925 non-null float64
32 V32 1925 non-null float64
33 V33 1925 non-null float64
34 V34 1925 non-null float64
35 V35 1925 non-null float64
36 V36 1925 non-null float64
37 V37 1925 non-null float64
dtypes: float64(38)
memory usage: 571.6 KB
使用以下命令查看统计结果eg:
print(train_data.describe())
可以得到样本数;数据的均值;标准差;最小值;最大值等信息
2.2 可视化数据分布
2.1 箱形图
sns.boxplot(x=train_data['V0'], orient="V", width=1)
plt.show()
从图中可以看住有偏离值,许多数据点位于四分位点以下。
2.2 获取异常数据并画图
此方法可以采用模型预测的形式找出异常值,eg:通过岭回归模型找出异常值,并绘制器分布
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
train_file = "./zhengqi_train.txt"
test_file = "./zhengqi_test.txt"
train_data = pd.read_csv(train_file, sep='\t', encoding = 'utf-8')
test_data = pd.read_csv(test_file, sep='\t', encoding = 'utf-8')
# train_data.info()
# test_data.info()
# train_data.max()
# train_data.describe(percentiles=None, include=None, exclude=None)
# print(train_data.describe())
# sns.boxplot(x=train_data['V0'], orient="V", width=1)
# plt.show()
def find_outliers(model, x, y, sigma=3):
try:
y_pred = pd.Series(model.predict(x), index=y.index)
except:
model.fit(x,y)
y_pred = pd.Series(model.predict(x), index=y.index)
resid = y - y_pred
mean_resid = resid.mean()
std_redsid = resid.std()
z = (resid - mean_resid)/std_redsid
outliers = z[abs(z)>sigma].index
print('R2=',model.score(x,y))
print('mse=',mean_squared_error(y,y_pred))
print('--------------------------------')
print('mean of residuals:', mean_resid)
print('std of residuals:', std_redsid)
print('--------------------------------')
print(len(outliers), 'outliers:')
print(outliers.tolist())
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
x_train = train_data.iloc[:,0:-1]
y_train = train_data.iloc[:,-1]
outliers = find_outliers(Ridge(), x_train, y_train)
运行结果如下:
R2= 0.8890858938210386
mse= 0.10734857773123632
--------------------------------
mean of residuals: -2.3065575303846744e-19
std of residuals: 0.32769766731934985
--------------------------------
31 outliers:
[321, 348, 376, 777, 884, 1145, 1164, 1310, 1458, 1466, 1484, 1523, 1704, 1874, 1879, 1979, 2002, 2279, 2528, 2620, 2645, 2647, 2667, 2668, 2669, 2696, 2767, 2769, 2807, 2842, 2863]
图: 暂略