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. python中os模块的一些小总结

    (一)os模块的应用小总结 os.name: 获取当前系统平台,Windows下返回'nt',Linux下返回'posix'.   os.linesep: 获取当前平台使用的行终止符.Windows下 ...

  2. 秒秒钟破解eval加密

    前言  准确的说eval处理过的代码应该叫做压缩代码,不过效果上算是加密过了一样!很多小伙伴不想直接让别人看到自己的js代码往往就会采取这样的处理措施.不过,其实这样的方法只能防御那些小白.对于真正的 ...

  3. A Simple Introduction To Computer Networking

    Most networking discussions are a jumble of acronyms. Forget the configuration details - what are th ...

  4. Exchange邮件服务器安全

    Exchange是由微软推出的用于企业环境中部署的邮件服务器.Exchange在逻辑上分为三个层次:网络层(network layer).目录层(directory layer).消息层(messag ...

  5. css- :before :after

    :before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example:before { conte ...

  6. 《N诺机试指南》(七)排版类问题

    1.菱形问题: 解析: 主要通过打印空格和星形来打印整个图形,将整体分为=上三角形+下三角形 首先观察上三角形可以发现:第一行2个空格1个星.第二行1个空格3个星.第三行0个空格5个星     空格数 ...

  7. ELF文件之八——使用链接脚本-2个函数-data-bss-temp-call-debug信息

    gcc编译选项可以设置生成调试信息, debug信息格式有stabs,coff,xcoff,dwarf. 常用的有两种格式,stab和dwarf,stab较早,dwarf较新.两种格式介绍:https ...

  8. 数据库主从监控脚本,数据传到influxdb

    #!/bin/bash port=`/usr/sbin/ss -ntlp | | awk '{print $4}' | awk -F":" '{print $2}'` array= ...

  9. 修改centos7容器的时间和宿主机时间一致

    一.问题 centos7系统容器时间与宿主机系统时间不一致,就进去查看一番,发现时区和宿主机上的时间不一致,下面就来解决一下 二.现象 1.查看centos宿主机的时间 输入如下命令查看 # date ...

  10. asp.net MVC项目开发之统计图的使用(前言)

    接触这个项目,是项目组长已经完成了多数需求,并且有2个项目需要完工的情况下,让我加入,给了我2个表格,让我去设计出统计图.      第一次做统计图,可以说没有任何经验,不知道该如何下手,表格的数据量 ...