文章目录

  • 前言
  • 一、任务简介
  • 二、数据处理
  • 三、特征工程
    • 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. php三年经验 多少工资_二级建造师一个月可以赚多少钱?
  2. 全球及中国EDM放电加工机行业运营盈利前景与渠道分析报告2022版
  3. java 集合框架快速预览
  4. java先进先出 循环队列,JavaScript队列、优先队列与循环队列
  5. 在PHP中实现中文汉字验证码
  6. C#经典算法实践,回顾往生,更是致敬《算法导论》
  7. 回溯---含有相同元素求子集
  8. Codeforces Round #197 (Div. 2): D. Xenia and Bit Operations(线段树)
  9. 记在k8s的pod上使用apache的commons-net:ftp功能时,ftp一直上传文件失败
  10. 【图像分割】基于matlab改进的细菌觅食算法双阈值图像分割【含Matlab源码 069期】
  11. 回顾过去三年工作中对区块链技术的一点心得
  12. ArcMap|时空地理加权回归(GTWR)
  13. HTML5游戏引擎(十七)-egret引擎实战——踩格子游戏
  14. linux鼠标切换窗口的快捷键设置,Xshell中如何设置鼠标快捷键
  15. python md5计算
  16. linux下c使用lzma_使用 LZMA SDK
  17. 【SPSS】【Python】“发生严重错误客户端无法再与服务器通信”无法导入表格
  18. 生产者消费者模型实现方式:管程法,信号灯法
  19. 【JS】JavaScript
  20. MySQL需要掌握到什么程度,才有机会进入大厂?来看清华资深架构师推荐文档

热门文章

  1. 钢琴快案例及手风琴案例
  2. spoj Help the Military Recruitment Office!
  3. jQ html5拖放
  4. [工作积累] shadow map问题汇总
  5. PhoneGap与Jquery Mobile结合开发android应用配置
  6. 同步和异步GET,POST请求
  7. SQL Stored Procedure Generator
  8. IIS5.1错误,启动时WEB服务提示:服务器没有及时响应启动或控制请求 之终极解决方案。...
  9. 2021-11-11Object类
  10. datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...