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. 【WPF学习】第三十八章 行为

    样式提供了重用一组属性设置的实用方法.它们为帮助构建一致的.组织良好的界面迈出了重要的第一步——但是它们也是有许多限制. 问题是在典型的应用程序中,属性设置仅是用户界面基础结构的一小部分.甚至最基本的 ...

  2. rep stos 指令(Intel汇编)

    今天读代码时,忽然跳出如下一条指令==>> 汇编代码: rep stos dword ptr es:[edi] 在网上查了相关资料显示: /************************ ...

  3. for实例

    #-*- coding:utf-8 *-* salary = 5000 shop_list = [('iphone',9000),('mac book',10000),('python book',9 ...

  4. 未来图书-需求分析——脑机接口、VR、AI推荐系统

    个人比较喜欢科幻作品,也常常畅想未来.. "书"作为几千年来人类文明信息载体,必然会不断演变.. 文荟宿舍墙上贴着Elon Musk的海报,向往像他一样能够在有限的生命中用极致的想 ...

  5. Mysql的基本查询语句

    聚集函数 mysql有5个聚集函数,分别是AVG,MAX,MIN,SUM,COUNT. 分组 分组的使用group by作为关键字,having作为条件关键字. having和where的区别:1.w ...

  6. Shiro权限验证说明

    1.简介 shiro是一个安全框架,是Apache的一个子项目.shiro提供了:认证.授权.加密.会话管理.与web集成.缓存等模块. 1.1.模块介绍 Authentication:用户身份识别, ...

  7. Golang调用Dll案例

    Golang调用Dll案例 前言 在家办公已经两个多星期了,目前最大的困难就是网络很差.独自一个人用golang开发调用dll的驱动程序.本来就是半桶水的我,还在为等待打开一个页面而磨平了耐心.本想依 ...

  8. gridFS-Nginx的安装与使用

    在使用gridFs的nginx模块时,先确认好你的机器上已经安装好了mongo 首先通过git将最新的gridfs的nginx模块下载到本地 git clone https://github.com/ ...

  9. JAVA System.exit(0) 和 System.exit(1) 的区别

    System.exit(int state) 方法都是来结束当前运行的java虚拟机.所有System.exit(1).System.exit(0) 执行后都会退出程序. state为0时时正常退出, ...

  10. 大数相加-----杭电acm1002

    #include<stdio.h> #include<string.h> int main() { ], ch2[]; ], num2[]; ; scanf("%d& ...