2021年全国大学生数据统计与分析竞赛-B题分析
2021年全国大学生数据统计与分析竞赛的B题代码精简版
模块加载
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import warnings
import xgboost as xgb
from xgboost import XGBClassifier
from xgboost import plot_importance
from sklearn.metrics import accuracy_score,classification_report,confusion_matrix,roc_curve,roc_auc_score
from sklearn.model_selection import train_test_splitGridSearchCV,cross_val_scorewarnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
数据读取
#读取经过预处理的数据
df = pd.read_csv('修正数据1.csv')
特征重要性
#选取重要的10个特征
new_data_0 = df[['coupon','distance_day','coupon_visit','study_num','course_order_num','login_diff_time','chinese_subscribe_num','learn_num','platform_num','first_order_price','result']]
数据切分
#切分数据
dataset = new_data_0
X = dataset.iloc[:,:10]
y = dataset.iloc[:,10]X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=7,stratify=y)
模型建立
#初始
model = XGBClassifier(max_depth=6, #初始值4learning_rate=0.1,n_estimators = 151, #初始值200objective='binary:logistic',booster='gbtree',reg_lambda = 0.3, #初始值1reg_alpha = 0.01, #初始值0gamma=0.7, #初始值0eval_metric = 'error',min_child_weight=1,subsample=0.8, # 初始值0.5colsample_bytree=0.5, #初始值1 seed=7)
调参
dtrain = xgb.DMatrix(X_train,label=y_train)
#使用交叉验证cv找到最佳的迭代次数(决策树的数量)
cv_result = xgb.cv(model.get_xgb_params(), #352dtrain,num_boost_round=353,nfold=6,metrics='auc',early_stopping_rounds=20,callbacks=[xgb.callback.early_stop(20),xgb.callback.print_evaluation(period=1,show_stdv=True)])
#绘制n_estimators-精度图
plt.figure(dpi=100,figsize=(5,3))
plt.plot(cv_result['test-auc-mean'][:151])
plt.xlabel('n_estimators')
plt.ylabel('精度')
plt.show()
## max_depth、min_child_weight
param_grid = {'max_depth':[3,4,5,6,7,8,9],'min_child_weight':[1,2,3,4]} #'gamma':[1,2,3,4,5,6,7,8,9]grid_search = GridSearchCV(model,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(X_train,y_train)print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)
## gamma
param_grid = {'gamma':[i/10.0 for i in range(0,11)] }grid_search = GridSearchCV(model,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(X_train,y_train)print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)
##subsample、colsample_bytree
param_grid = {'subsample':[i/10.0 for i in range(5,10)], #5'colsample_bytree':[i/10.0 for i in range(5,10)]}grid_search = GridSearchCV(model,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(X_train,y_train)print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)
##reg_alpha、reg_lambda
#'reg_alpha':[0, 0.001, 0.005, 0.01, 0.05]
param_grid = {'reg_alpha':[0, 0.005, 0.01, 0.05],'reg_lambda':[0, 0.3, 0.5, 1]}grid_search = GridSearchCV(model,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(X_train,y_train)print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)
#最后再调节学习率
param_grid = {'learning_rate': [0.01, 0.05, 0.07, 0.1, 0.12,0.15]}grid_search = GridSearchCV(model,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(X_train,y_train)print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)
交叉验证
#最优参数
from sklearn.model_selection import KFold
splits = KFold(n_splits=5, shuffle=True, random_state=20211)parameters = {'max_depth':6,'learning_rate':0.01,'objective':'binary:logistic','booster':'gbtree','n_jobs':4,'reg_alpha': 0.01,'reg_lambda' : 0.3,'gamma':0.7,'eval_metric' : 'error','min_child_weight':1,'subsample':0.8,'colsample_bytree':0.5,'seed':7 }predicted_train_xgb = np.zeros(len(X_train))
predicted_test_xgb = np.zeros(len(X_test))for fold_, (trn_idx, val_idx) in enumerate(splits.split(X_train, y_train)):print("fold {}".format(fold_+1))# print(list(trn_idx))trn_data = xgb.DMatrix(X_train.iloc[trn_idx], y_train.iloc[trn_idx])val_data = xgb.DMatrix(X_train.iloc[val_idx], y_train.iloc[val_idx])watchlist = [(trn_data, 'train'), (val_data, 'valid_data')]clf = xgb.train(dtrain=trn_data, num_boost_round=5000, evals=watchlist, early_stopping_rounds=200, verbose_eval=100, params=parameters,)predicted_train_xgb[val_idx] = clf.predict(xgb.DMatrix(X_train.iloc[val_idx]), ntree_limit=clf.best_ntree_limit)predicted_test_xgb += clf.predict(xgb.DMatrix(X_test), ntree_limit=clf.best_ntree_limit) / splits.n_splits
模型评估
#混淆矩阵
#bool -> 0-1
pre_data = (predicted_test_xgb >=0.40) +0
#打印评估报告
print(classification_report(pre_data, y_test))
注:实际比赛中还使用了特征工程、模型融合等。
总结
这次比赛是大学生数据分析领域一次比较难得的比赛,由于是第一届,参赛的人不多,知名度也没啥,但是这样完整的做下来,还是感觉收获挺多的,首先是数据的预处理,这里就没有展示了,但是这部分可以说是最重要的,每个字段的数据要根据字段的具体含义去判断,还要联系几个字段之间的关系。例如在调查报告中,给出一个人的驾驶时长、调查时间、出生日期,很明显通过调查时间和出生日期可以计算年龄,年龄肯定大于驾龄+18,不然就算是异常的,可能数据中没有这种异常出现,但是也是值得分析的!再就是模型调参了,这部分的提升不算明显,但是这样能使得建模更加完整!特征工程的话,简单来说就是对已有字段(特征)进行挖掘,可以添加某个字段(特征)均值方差作为新的字段(特征),也可以是几个特征的组合等等,模型都是次要的,因为模型的结构就那样了,每个人的模型都差不多,但是每个人的特征工程做的可能都不一样。
2021年全国大学生数据统计与分析竞赛-B题分析相关推荐
- 2021年全国大学生数据统计与分析竞赛赛题B—基于机器学习的用户消费行为预测(上)
2021年全国大学生数据统计与分析竞赛赛题B-基于机器学习的用户消费行为预测(上) 一.赛题B:用户消费行为价值分析 二.基于机器学习的用户消费行为预测 1.数据简介及清洗 (一)数据简介 (二)数据 ...
- 2021 年全国大学生数据统计与分析竞赛
本文涉及以下内容 1. pandas数据处理.筛选.计算 2. 复杂的表格数据计算与处理 3. 文本分析与无监督学习 4. 将计算结果输出表格 5. 数据特征对比 赛题 思路 代码 将excel文件中 ...
- 全国大学生数据统计与分析竞赛2021年【研究生组】-A题:基于文本向量空间的评阅专家观点评价模型的建立与分析(附优秀论文及python代码实现)
目录 摘 要 第一章 引言 1.1研究背景 1.2研究意义 第二章数据预处理 2.1问题描述
- 全国大学生数据统计与分析竞赛2021年【本科组】-B题:战胜市场: 应用基于熵权平衡的 CatBoost 二分类模型和改进 RFM 用户价值模型
目录 摘要 1 引言 1.1 问题描述 1.2 我们的思考 1.3 本文主要工作与创新点 2 模型假设
- 全国大学生数据统计与分析竞赛2021年【研究生组】-B题:基于 lightGBM 的用户消费行为价值分析(附优秀论文及python代码实现)
目录 摘 要 1.问题的重述 1.1 问题背景 1.2 问题提出 2.基本假设与符号说明
- 2021年全国大学生数据建模 C题 数学建模大赛
基于多目标优化模型的原材料订购与运输问题研究 目录 一.摘要 1.问题重述 1.1问题的条件 1.2问题的重述 2.问题分析 2.1问题一的分析 2.2问题二的分析 2.3问题三的分析 2.4问题四的 ...
- 2021 年高教社杯全国大学生数学建模竞赛A题分析
2021 年高教社杯全国大学生数学建模竞赛A题分析 题目 赛题分析 前言 问题一分析 问题二分析 问题三分析 题目 A 题 "FAST"主动反射面的形状调节 中国天眼--500 米 ...
- 2021年全国大学生电子设计竞赛F题中数字识别这一技术分支实践与学习笔记
文章目录 Chapter 1 简介 Chapter 2 制作思路 Section 1 环境与成像效果及思路 Section 2 制作并训练数据集 Section 3 电脑环境配置 Section 4 ...
- A6.2021年全国数学建模竞赛C题分析-生产企业原材料的订购与运输
Python小白的数学建模课-A6.2021年全国数学建模竞赛 C题分析. 2021全国大学生数学建模 赛题将于9月9日18时公布. 『Python小白的数学建模课 @ Youcans』带你从数模小白 ...
最新文章
- python一次性读取整个文件-python逐行读取文件内容的三种方法
- JavaScript代码规范
- 参数无效_Shell 脚本启动如何传递参数
- 【Pygame小游戏】首月破亿下载 一款高度融合了「超休闲游戏特性」的佳作~
- 科大星云诗社动态20210909
- 牛津、剑桥、OpenAI联合发出AI预警《人工智能的恶意使用》
- 有关代码段、数据段、BOSS段、堆、栈的存储位置问题。。。
- 稳扎稳打Silverlight(25) - 2.0线程之Thread, Timer, BackgroundWorker, ThreadPool
- mysql 选取数据库_mysql选取数据库
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
- React.js 小书 Lesson10 - 组件的 state 和 setState
- npm webstorm配置_怎样使用webstorm中配置nodejs环境及npm
- 开机未发现nvidia控制面板_nvidia控制面板打不开如何解决_nvidia控制面板点了没反应...
- 台达plc控制伺服电机编程实例_分享3个台达PLC控制伺服项目接线及程序案例
- 扫雷游戏网页版_如何成为扫雷高手,数学老师教你玩转这款复古小游戏
- SIM868调试日志
- VS2013 设置背景图
- 淘东电商项目(27) -门户登出功能
- P3332 [ZJOI2013]K大数查询 - 整体二分-区间修改
- VB6 加载控件Windows Common Controls 6.0(mscomctl.ocx)失败提示“对象库未注册”
热门文章
- 05- web网站链接测试与XENU工具使用
- Android动画中Interpolator 加速器的使用
- 【TeamViewer丨远程控制软件】上海道宁助您远程访问和即时远程支持,提高远程工作团队的生产力
- MP4转MP3——python
- 【正点原子MP157连载】第四十一章 RGB转HDMI实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 前端小游戏(强烈推荐)
- EMC 重新注册license
- Jlink给目标板供电 外部电源给目标板供电
- 关于 SolidWorks 2012 激活过期或删不干净的问题解决
- 一名前端爱好者的学习之路 - 说说我和前端的认识过程我的前端学习路线(结束更新了 希望之后顺利~)