数据挖掘类比赛经验分享

今天小荟给大家分享一下参加数据挖掘类比赛的个人经验,希望能够对正在参加或者今后准备参加的小伙伴有所帮助。

首先先分享一下数据挖掘类比赛赛题完成标准流程:
▼1数据的可视化分析
▼1.1上下文信息
1.1.1广告主信息
1.1. 2设备信息
1.1.3操作系统信息
1.1.4时间信息
1.2用户信息
2数据预处理
3特征工程
▼4模型
4.1创建模型
4.2调参
4. 3模型评估
4.4模型整合
5提交测试集结果


根据上方流程图,小荟给小伙伴们就各个点进行详细阐述。
熟悉赛题背景和目标
·研读赛题信息
了解评估准则阶段
·选择比赛中适合的模型
·分析业务好特征工程
数据预处理阶段
3.1对重复值、异常值、缺失值处理
重复值删除(例如xh.drop_duplicates());
异常值剔除:
a.进行简单的统计分析,对属性值进行一个描述性的统计, 从而查看哪些值是不合理的;
b. 3σ原则,根据正态分布的定义,距离平均值3σ之外的概率不超过0.003,这属于极小概率事件;
c. 聚类分析,如DBSCAN基于密度的聚类方法,可用于离群点检测。
d.箱型图分析,箱型图提供了一个标准,即大于或小于箱型图设定的上下界的数值即为异常值。
缺失值填充(例如:xh.fillna(xh.mean)),删除(例如:xh.dropna());
3.2对特征进行缩放
整体进行归一化,避免量级过大影响权值,归一化后权重可置为1。
主要有三种方式:min-max normalization、Mean normalization、Standardization,相关函数可百度查询。
3.3解决样本不均衡问题
a.上采样(过采样) : 通过增加分类中样本较少的类别的采样数量来实现平衡
方法1:直接复制小样本数据,缺点是容易导致过拟合
方法2:通过一定规则生成新的变量,如smote
b.下采样(欠采样) :通过减少分类中多数类样本的数量来实现样本均衡
方法1:随机去掉一些多数类,缺点是可能会丢失一些重要信息
方法2:根据原始样本,生成新的样本来替换多数类样本
c.设置权重:对不同样本数量的类别赋予不同的权重(通常会设置为与样本量成反比)
d.集成方法:生成多组样本进行训练电每组样本包含所有少数类样本和多数类样本的抽样。例如训练集正例有1000条,反例有100条,则将数据分为10组,每组放全部的反例和100个正例样本。
特征处理阶段
4.1特征的类型
数值类型:连续型,离散型
类别类型:LabelEncoder、one-hot编码
时间类型:持续时间、时间间隔
文本类型
图形类型
4.2特征构建
a.用基因编程创造新特征
转换(transformation) :把已有的特征进行组合转换,组合的方式(一元、二元、多元算子)可以由用户自行定义,也可以使用库中自带的函数。
b.根据业务分析创建特征
例如,原始数据是用户的消费记录,通过业务分析,发现消费类型的多样性与征信密切相关,就可以提取这个特征。
4.3特征选择
a.过滤式Flitering
根据特征的方差或相关系数对特征重要程度进行排序,方差越大、与目标变量相关系数越高,则特征越重要。
b.包裹式wrapper
①前向选择:初始候选特征集为空,每次从原始特征中选择一个使效果最好的特征添加到所选特征集中,直到添加任何特征不能明显提高模型效果。
②后向选择:初始候选特征集为所有特征,每次从原始特征集删除一个特征使得模型效果 下降最少,直到删除任何特征都会使得模型效果明显下降,所剩的特征就是所选特征集。
c.嵌入式embedding
①Lasso回归,通过L1正则化,对特征进行选择
②GBDT、Xgboost, 在不同数据抽样、不同样本抽样所得到的诸多单棵决策树中,重要的特征会有更高概率出现在树中
d.SelectKBest
Sklearn有专门用于筛选特征的模块feature_ selection, 目前主要包括:单变量特征选择和递归特征消除。
创建模型
几种比赛中常用模型:
a.LogisticRegregsion()
b.GradientBoostingClassifier()
c.XGBClassifier()
d.lgbm = LGBMClassifier()
调参与优化
def ModelOptimization(model, params, train. x,train.y):
是否满足要求——模型评估
def Model_evaluation(model, train_x. train_y):
score = -cross.val_score (model,train_x,train_y,scoring="neg_lg_loss",cv=10).mean()
保存模型
def Submit(id,pred_y):
submission = pd.DataFrame(( instance.id”: id," predicted.score" : pred._y))
submission. to_ csv(".. /Submission/ submission.csv, index = False)
希望能够给对此类比赛感兴趣的小伙伴有所帮助。
如果喜欢的话,请给小荟献出一条龙,小荟心里暖融融!!!