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题分析相关推荐

  1. 2021年全国大学生数据统计与分析竞赛赛题B—基于机器学习的用户消费行为预测(上)

    2021年全国大学生数据统计与分析竞赛赛题B-基于机器学习的用户消费行为预测(上) 一.赛题B:用户消费行为价值分析 二.基于机器学习的用户消费行为预测 1.数据简介及清洗 (一)数据简介 (二)数据 ...

  2. 2021 年全国大学生数据统计与分析竞赛

    本文涉及以下内容 1. pandas数据处理.筛选.计算 2. 复杂的表格数据计算与处理 3. 文本分析与无监督学习 4. 将计算结果输出表格 5. 数据特征对比 赛题 思路 代码 将excel文件中 ...

  3. 全国大学生数据统计与分析竞赛2021年【研究生组】-A题:基于文本向量空间的评阅专家观点评价模型的建立与分析(附优秀论文及python代码实现)

    目录 摘 要 第一章 引言 1.1研究背景 1.2研究意义 第二章数据预处理 2.1问题描述

  4. 全国大学生数据统计与分析竞赛2021年【本科组】-B题:战胜市场: 应用基于熵权平衡的 CatBoost 二分类模型和改进 RFM 用户价值模型

    目录 摘要 1 引言 1.1 问题描述 1.2 我们的思考 1.3 本文主要工作与创新点 2 模型假设

  5. 全国大学生数据统计与分析竞赛2021年【研究生组】-B题:基于 lightGBM 的用户消费行为价值分析(附优秀论文及python代码实现)

    目录 摘 要 1.问题的重述 1.1 问题背景 1.2 问题提出 2.基本假设与符号说明

  6. 2021年全国大学生数据建模 C题 数学建模大赛

    基于多目标优化模型的原材料订购与运输问题研究 目录 一.摘要 1.问题重述 1.1问题的条件 1.2问题的重述 2.问题分析 2.1问题一的分析 2.2问题二的分析 2.3问题三的分析 2.4问题四的 ...

  7. 2021 年高教社杯全国大学生数学建模竞赛A题分析

    2021 年高教社杯全国大学生数学建模竞赛A题分析 题目 赛题分析 前言 问题一分析 问题二分析 问题三分析 题目 A 题 "FAST"主动反射面的形状调节 中国天眼--500 米 ...

  8. 2021年全国大学生电子设计竞赛F题中数字识别这一技术分支实践与学习笔记

    文章目录 Chapter 1 简介 Chapter 2 制作思路 Section 1 环境与成像效果及思路 Section 2 制作并训练数据集 Section 3 电脑环境配置 Section 4 ...

  9. A6.2021年全国数学建模竞赛C题分析-生产企业原材料的订购与运输

    Python小白的数学建模课-A6.2021年全国数学建模竞赛 C题分析. 2021全国大学生数学建模 赛题将于9月9日18时公布. 『Python小白的数学建模课 @ Youcans』带你从数模小白 ...

最新文章

  1. python一次性读取整个文件-python逐行读取文件内容的三种方法
  2. JavaScript代码规范
  3. 参数无效_Shell 脚本启动如何传递参数
  4. 【Pygame小游戏】首月破亿下载 一款高度融合了「超休闲游戏特性」的佳作~
  5. 科大星云诗社动态20210909
  6. 牛津、剑桥、OpenAI联合发出AI预警《人工智能的恶意使用》
  7. 有关代码段、数据段、BOSS段、堆、栈的存储位置问题。。。
  8. 稳扎稳打Silverlight(25) - 2.0线程之Thread, Timer, BackgroundWorker, ThreadPool
  9. mysql 选取数据库_mysql选取数据库
  10. 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
  11. React.js 小书 Lesson10 - 组件的 state 和 setState
  12. npm webstorm配置_怎样使用webstorm中配置nodejs环境及npm
  13. 开机未发现nvidia控制面板_nvidia控制面板打不开如何解决_nvidia控制面板点了没反应...
  14. 台达plc控制伺服电机编程实例_分享3个台达PLC控制伺服项目接线及程序案例
  15. 扫雷游戏网页版_如何成为扫雷高手,数学老师教你玩转这款复古小游戏
  16. SIM868调试日志
  17. VS2013 设置背景图
  18. 淘东电商项目(27) -门户登出功能
  19. P3332 [ZJOI2013]K大数查询 - 整体二分-区间修改
  20. VB6 加载控件Windows Common Controls 6.0(mscomctl.ocx)失败提示“对象库未注册”

热门文章

  1. 05- web网站链接测试与XENU工具使用
  2. Android动画中Interpolator 加速器的使用
  3. 【TeamViewer丨远程控制软件】上海道宁助您远程访问和即时远程支持,提高远程工作团队的生产力
  4. MP4转MP3——python
  5. 【正点原子MP157连载】第四十一章 RGB转HDMI实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  6. 前端小游戏(强烈推荐)
  7. EMC 重新注册license
  8. Jlink给目标板供电 外部电源给目标板供电
  9. 关于 SolidWorks 2012 激活过期或删不干净的问题解决
  10. 一名前端爱好者的学习之路 - 说说我和前端的认识过程我的前端学习路线(结束更新了 希望之后顺利~)