Problem

对于商家来说提前识别回头客是一件集中资源提高新品销售量的头等大事,各大商家为了吸引顾客的二次购买都会实行各种像是促销、优惠券、折扣之类的策略。按理说越了解客户,越知道客户的喜好,越能精准推销,就越能实现券的高使用率,但是在初期预测一个客户的忠诚度其实是一件很困难的事。

本节就是在给定客户历史交易记录的信息预测他是否会再次光顾使用之前提供的券,在机器学习领域里这就是一个很典型的是非二元分类问题。

Data

由于原始数据量很大,有500G, 包含上百万条客户的历史交易记录数据transaction,历史商店回顾情况history以及优惠券的各项基本信息offer,为了更方便进行数据处理,需要将研究人数进行减缩。

Transaction

数据结构很简单,就是描述了某个客户某天某次在某家公司的某个商店的购买量以及购买金额。

Offer

数据集显示了此券的商家、使用条件以及折扣力度。

History

数据集包含客户在某个商圈的某家商店购买过几次,是不是一个回头客以及他收到商家的优惠券的时间

Preprocessing

在给定的特征基础上,我们extract出了几个会影响the chance of repeat purchace的人工变量:

Company

对于某家商场用户历史券使用量、使用额、前30天/60天/90天/180天使用额

CAT

对于某个类别用户历史券使用量、使用额、前30天/60天/90天/180天使用额

Brand

对于某个品牌用户历史券使用量、使用额、前30天/60天/90天/180天使用额

Combination

Offer

优惠券的力度与条件

Shopper

客户历史总消费

最终特征选取如下:

offer_quantity:1
has_bought_company_a:243.63
has_bought_brand_180:7.0
has_bought_brand_a_180:23.13
has_bought_brand_q_180:7.0
offer_value:2
has_bought_brand_a_60:14.95
has_bought_company_q:37.0
has_bought_brand_q_30:1.0
has_bought_brand:8.0
has_bought_company_q_30:6.0
has_bought_brand_30:1.0
has_bought_company_q_60:16.0
has_bought_brand_company:1
has_bought_brand_90:6.0
has_bought_company_q_180:19.0
has_bought_company_30:6.0
has_bought_brand_a:28.71
has_bought_company_a_90:106.13
has_bought_brand_q_90:6.0
never_bought_category:1
has_bought_company_180:19.0
has_bought_brand_q:9.0
has_bought_company_a_30:46.74
has_bought_company_q_90:17.0
has_bought_brand_a_30:4.59
total_spend:4140.41
has_bought_company_a_60:100.44
has_bought_brand_q_60:5.0
has_bought_company_a_180:113.21
has_bought_company_60:16.0
has_bought_brand_60:5.0
has_bought_company_90:17.0
has_bought_brand_a_90:20.64
has_bought_company:36.0

Model

Vowpal_wabbit 是在单机上速度非常快的机器学习库。

本质原因是vowpal_wabbit采用的是在线学习,也即优化方法采用的是随机梯度下降的方法。相比较batch gradient,online-learnging 的速度快,但是效果可能没有batch-learning好。

在线学习收敛速度慢,在小数据集上表现不佳,但由于不需要将所有的数据集全部加载进来,所以,在单机上也是可以处理海量的数据,一条条数据进行处理在训练的过程中观察收敛情况。但它对样本的顺序敏感,比如在预测点击的数据集中,点击的样本集中在前面,未点击的数据集中在后面,那么学习的效果就会不好。

这里使用的Python版的VW,调参情况如下:

-c -k --passes 40 says to use a cache, kill any previous cache and run 40 passes

-l 0.85 sets the learning rate to 0.85

--loss_function quantile says to use quantile regression

--quantile_tau 0.6 is a parameter to tweak when using the quantile loss function.

Evaluation

由于数据集中有200个客户没有任何使用优惠券的产品交易信息,因而预测结果为0. 总体模型预测结果良好,AUC达到0.69左右。

Case Study - 用户复购行为预测的更多相关文章

  1. Case Study: Random Number Generation(翻译教材)

    很荣幸,经过三天的努力.终于把自己翻译的教材做完了,现在把它贴出来,希望能指出其中的不足.   Case Study: Random Number Generation Fig. 6.7  C++ 标 ...

  2. Data Visualization – Banking Case Study Example (Part 1-6)

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  3. 【ASE模型组】Hint::neural 模型与case study

    模型 基于搜索的提示系统 我们的系统用Pycee针对语法错误给出提示.然而,对于语法正确.结果错误的代码,我们需要另外的解决方式.因此,我们维护一些 (错误代码, 相应提示) 的数据,该数据可以由我们 ...

  4. Deep Learning-Based Video Coding: A Review and A Case Study

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 1.Abstract: 本文主要介绍的是2015年以来关于深度图像/视频编码的代表性工作,主要可以分为两类:深度编码方案以及基于传统编码方 ...

  5. 课程三(Structuring Machine Learning Projects),第一周(ML strategy(1)) —— 1.Machine learning Flight simulator:Bird recognition in the city of Peacetopia (case study)

    []To help you practice strategies for machine learning, the following exercise will present an in-de ...

  6. Attacking JavaScript Engines: A case study of JavaScriptCore and CVE-2016-4622(转)

    转:http://phrack.org/papers/attacking_javascript_engines.html Title : Attacking JavaScript Engines: A ...

  7. 关于运维之故障复盘篇-Case Study

    关于故障的事后复盘,英文名 Case Study是非常有必要做的,当然是根据故障的级别,不可能做到每个故障都Case Study,除非人员和时间充足: 文档能力也是能力的一种,一般工程师的文档能力比较 ...

  8. 李宏毅机器学习课程---2、Regression - Case Study

    李宏毅机器学习课程---2.Regression - Case Study 一.总结 一句话总结: 分类讨论可能是比较好的找最佳函数的方法:如果 有这样的因素存在的话 模型不够好,可能是因素没有找全 ...

  9. 你从未见过的Case Study写作指南

    Case Study,意为案例分析,Case Study与其它的留学论文作业最大的的差别就在于Case Study在论文开始就需要明确给出论,然后再阐述这个结论的论证依据和理由.留学生们需要知道的是C ...

随机推荐

  1. 最好用的web端代码文本编辑器ACE

    使用足够简单,功能足够强大,体验足够优秀 之前有一个系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,总共发了四篇文章介绍了三个非常棒的插件,分别是bootstrap-duallistbox ...

  2. demon病毒样本分析

    1. 简介 该样本是前几周爆发的THINKPHP漏洞中,被批量上传的一个病毒样本.如图所示. 2. 分析 该样本未经混淆,加壳,所以直接拖到IDA中即可分析. 首先从main函数开始.做一些初始化的函 ...

  3. [Python]获取win平台文件的详细信息

    import win32api def getFileProperties(fname): """ 读取给定文件的所有属性, 返回一个字典. ""&q ...

  4. Jmeter之上传文件

    前言 我们可以利用postman工具来测试上传文件的接口,那么假如要利用Jmeter工具来进行上传接口的测试,又该如何测试呢? 上传文件的接口地址:/pinter/file/api/upload:接口 ...

  5. 自定义属性的访问 - Customizing attribute access

    自定义属性的访问 - Customizing attribute access 在 python 中, 下列方法可以实现类实例属性 instance.attribute 的 使用,设置,删除. obj ...

  6. vue学习(一)项目搭建

    首先需要配置node和npm,如果没有安装的话,百度一下安装教程. 如果感觉npm下载速度慢,可以使用淘宝镜像cnpm,链接地址: http://npm.taobao.org/ 安装cnpm npm ...

  7. 前端添加复选框checkbox 提交到django后台处理

    根据前端勾选的复选框 提交勾选的数据到后台处理 che.html <!DOCTYPE html> <html lang="en"> <head> ...

  8. 安装 Cacti 监控

    简介:                Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.         Cacti是通过 snmpget来获取数据,使用 ...

  9. [Redis-CentOS7]Redis集合操作(四)

    SADD 集合添加 127.0.0.1:6379> SADD bbs discuz.net (integer) 1 127.0.0.1:6379> SADD bbs "tiany ...

  10. 在windows系统安装nginx

    1.下载Nginx,链接:http://nginx.org/en/download.html 2.解压放到自己的磁盘,双击击运行nginx.exe,会有命令框一闪而过,在浏览器上面输入localhos ...