文章目录

  • 前言
  • 一、任务简介
  • 二、数据处理
  • 三、特征工程
    • 1.尽量多做特征
    • 2.特征筛选
    • 3.根据特征重要性排序获得启发,构造更多特征
  • 四、模型训练及预测

前言

  参加了某运营商举办的系列比赛连续获奖,比赛登录公司内部账号,可直接操作内部真实业务数据(脱敏后),在真实生产环境中建模。作为外行,这是我第一次知道机器学习在真实生产中是怎么应用的,这里把参赛的技术要点总结一下。

一、任务简介

  任务是根据运营商提供的用户数据来分析用户偏好。数据id为手机号码(脱敏,看不到真实号码),主要数据包括每id的消费记录、通话记录、上网记录、APP使用记录、手机配置、用户属性(职业、收入、家庭等)、GPS轨迹等等。需要分析的偏好比如是否近期更换手机,是否近期安装ETC等等。

二、数据处理

1.使用Hadoop、spark抽取相关数据到本地
2.使用HiveSQL把有用字段提取后合并成一个以id为索引的大表
我习惯用pandas处理数据,它非常灵活高效,所以先用HiveSQL把数据全装到一个大表再传给建模平台用pandas处理,注意平台自动把竖杠"|"作为分隔符,所以HiveSQL提取字段时需要把每字段每记录中包含“|”的字符去掉,否则会造成串列。
3.使用pandas读取大表,通过可视化、统计等方法检验每字段的数据类型、异常值情况、分布规律等
4.滤掉高相关、重复、仅有单一值、伪id(即和Id一一对应且为字符)字段
5.填充缺失值。
根据各字段含义可按照平均值、众数、前月份值、新字符等填充。
6.字符类字段编码
字符类不便于后续特征工程处理,所以要编码,使用sklearn.preprocessing.LabelEncoder编码

三、特征工程

  特征工程的原则是:全面撒网、重点捕捞。就是说开始要尽量多做特征,批量创建多种特征,然后再对特征进行筛选,保留有用的特征。

1.尽量多做特征

第一类:id对应类特征,每id一条记录的字段类都可以直接作为特征
第二类:按id分组统计类,有的字段每id会有多条记录,例如通话时长。可以按照id分组后,统计次数、总和、最大最小值、均值、方差等
第三类:时序类字段的统计特征,例如各月的消费金额,可求取时序序列的最大最小值、均值、方差、偏度、峰度等
第四类:热线访问类,根据样本标签分离出阳性标签集和阴性标签集,可以统计出某些字段阳性标签对应的热线类别,例如app登录记录在安装ETC用户中排行前几的app被认为是热线app,然后再统计每id访问热线的次数、时长等指标作为特征。热线的定义除了根据阳性标签外,还可以根据阳性阴性比等其他指标定义。
第五类:根据场景和语义构造符合人类思维的特殊特征。这种特征往往比较有效。

2.特征筛选

  在构造特征时应根据原始字段名、构造方法等制定一个规范的命名规则,这样便于筛选的时候进行批量选择。筛选的主要方法就是根据验证集上的评价指标得分情况筛选,应该编制一个自动筛选代码,充分发挥算力优势,让电脑日夜不停的跑,自己去睡觉就行了。特征筛选完成后,还应再回到数据处理的代码部分,把那些被筛掉的特征相关的处理环节全部删除,这样可以大大加快数据处理的速度,毕竟模型建立以后工程上以后是要长期反复使用的,速度也是很重要的一个指标。

3.根据特征重要性排序获得启发,构造更多特征

  做特征和筛选特征是一个循环往复的过程,筛选的特征可以根据树模型的特征重要性排序功能得到贡献最大的一些特征,然后受这些特征启发,类比联想构造更多特征。

四、模型训练及预测

  我一般使用lightgbm建模,它速度快,用起来很爽。建模过程比较简单,这部分代码模板如下,要点是五折交叉融合,f1指标跟踪早停:

import numpy as np
from sklearn.metrics import f1_score
from sklearn.externals import joblib
import lightgbm as lgb
import time
t0=time.time()def feval_spec(preds, traindata):eval_score = f1_score(traindata.get_label(), np.round(preds))return 'f1_score:', eval_score, Trueparams = {'boosting_type': 'gbdt','learning_rate': 0.1,'num_leaves': 32,'objective': 'binary','metric': 'feval_spec','is_unbalance': 'true','nthread': -1,'verbose': -1,
}
feats=[col for col in data_feats.columns if col not in ['user_id','flag']]
skf = StratifiedKFold(n_splits=5,random_state=2020, shuffle=True)
yy_val, vval_label, = [],[]
for fold,(train_index,val_index) in enumerate(skf.split(range(len(data_feats)),data_feats.flag)):print('fold:',fold)val = data_feats.iloc[val_index]train = data_feats.iloc[train_index]trainData = lgb.Dataset(train[feats], label=train['flag'])valData = lgb.Dataset(val[feats], label=val['flag'])model = lgb.train(params, train_set=trainData, num_boost_round=10000,valid_sets=[valData],early_stopping_rounds=100,feval=feval_spec,verbose_eval=1000)y_val = model.predict(val[feats])yy_val.append(y_val)vval_label.append(val.flag.values)joblib.dump(model,'Model_fold%d.pkl'%fold)
yy_val = np.concatenate(yy_val)
yy_val = np.round(yy_val)
vval_label = np.concatenate(vval_label)
print(confusion_matrix(vval_label, yy_val))
print(f1_score(vval_label, yy_val))
####推理部分:
preds=[]
for fold in range(5):model = joblib.load('Model_fold%d.pkl'%fold)pred = model.predict(data_feats[feats])preds.append(pred)
p_value = np.array(preds).mean(axis=0)
pred = np.round(p_value).astype('int')

用户偏好类结构化数据分析题参赛总结相关推荐

  1. 【重磅】神策分析 1.13 版本上线 ,持续深耕打造场景化数据分析

    神策分析每一个功能特性.每一个场景交互,追求的是无缝贴合用户真实应用场景,产品设计及优化方向正从"功能"向"场景+角色"加速演进.神策数据所赋予用户的价值始终不 ...

  2. 用户运营4大策略体系搭建:增长框架+用户建模+场景化分层+数据运营

    用户运营体系是什么样的? 相信每个企业都有一套相对完善的用户运营体系,之前接触一些介绍用户体系的文章,基本将用户运营体系等同于用户分群策略和AARRR运营模型,实则这只是整个运营体系中的一角. 结合运 ...

  3. 毕业设计 - 题目:基于大数据的用户画像分析系统 数据分析 开题

    文章目录 1 前言 2 用户画像分析概述 2.1 用户画像构建的相关技术 2.2 标签体系 2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析 3.1 数据格式 3.2 数据预处理 3. ...

  4. 福利 |《非结构化数据分析》书评:探索非结构化数据的魅力

    文末有数据派独家福利哦 在过去的几年里,围绕大数据.物联网和人工智能等信息的宣传铺天盖地.这些新闻源源不断地向我们展示了技术和分析工作如何改变我们的生活和商业模式.将大数据和物联网转化为有实际价值的信 ...

  5. 基于动态用户偏好和服务质量的推荐算法

    引用: Zhang Y, Qian Y, Wang Y. A RecommendationAlgorithm Based on Dynamic User Preference and Service ...

  6. 美国进入“非结构化”数据分析新时代

     美国进入"非结构化"数据分析新时代 目前,对国内大部分企业级客户而言,大数据时代已经真正到来了. 虽然,近年来"大数据"及"数据分析" ...

  7. 3个常考的SQL数据分析题(含数据和代码)

    在数据类岗位招聘过程中,经常会考察求职者的SQL能力,这里整理了3个常考的SQL数据分析题,按照由简单到复杂排序,一起来测试一下你掌握了么? PS:以下SQL代码在MySQL8.0及其以上版本运行. ...

  8. 2022胺基化工艺题库及在线模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2022胺基化工艺操作考试题系胺基化工艺练习题考前押题!2022胺基化工艺题库及在线模拟考试依据胺基化工艺最新教材汇编.胺基化工艺模拟考试题库通过安全生产 ...

  9. 【数据分析】搜索和非结构化数据分析值得关注的5大趋势

    大多数组织都很好地利用了结构化数据(表格.电子表格等),但是很多未开发的业务关键的见解都在非结构化数据中. 80%组织正在意识到他们80%的内容是非结构化的. 企业中近80%的数据是非结构化的--工作 ...

最新文章

  1. T75 大数加法+取模
  2. 华为正式发布自有操作系统鸿蒙OS
  3. 20年IT老兵分享:账务系统设计及应用--转
  4. java继承构造_Java语言的继承结构
  5. java程序设计_JAVA基础程序设计之方法
  6. java中ur 传参数_java参数传递(超经典)
  7. 服务器ftp网站怎么临时关闭,如何停止pyftpdlib FTP服务器?
  8. c++调用栈库函数_大华 | C/C++ 校招笔试题
  9. Javascript第六章基本包装类型第八课
  10. R与Python手牵手:数据探索性分析案例展示
  11. OpenRefine使用教程
  12. python类方法在类外定义_第7.15节 Python中classmethod定义的类方法详解
  13. Ubuntu 解析迅雷链接
  14. 如何下载m3u8格式视频
  15. 【python】52周存钱法
  16. oracle12c cdb修改,Oracle 12c nocdb转换成cdb
  17. 【JZOJ A组】【NOIP2019模拟】最短路(tiring)
  18. JPEG文件中的EXIF(下)
  19. geo mysql_GEO数据库及应用场景介绍
  20. 200 PORT command successful. Consider using PASV / Linux 部署vsftp不能正常访问

热门文章

  1. linux命令学习之:ifconfig
  2. php+nginx上传文件配置
  3. 我爱工程化 之 gulp 使用(一)
  4. Android项目笔记整理(1)
  5. Javascript 面向对象编程定义接口的一种方法
  6. python网页请求_python用post请求网页
  7. python 时序数据库_时序数据库InfluxDB
  8. 想要一篇高分SCI,这些临床统计的诀窍你要知道
  9. 2021-11-13包装类
  10. 专利交底书模板_工大知识产权周 | 不说套话,看完这篇get专利技术交底书的要点!...