用户复购行为预测--数据挖掘分析案例(天池/python)

2023-11-10

–阿里天池新人赛中的一个,记录分享。
Repeat Buyers Prediction-Challenge the Baseline-天池大赛-阿里云天池

第一次提交:8简单特征,随机森林模型,score:0.5507327,排名:278
第二次提交:13特征,随机森林模型,score:0.5980033,排名:251
第三次提交:13特征,lightgbm模型,score:0.648646,排名:179
其实不止三次,控制变量提交过很多次,U. U。

用户复购行为预测

1.项目介绍
1.1背景和目的

淘宝卖家会做一系列营销活动以增长用户,但许多情况下,新增用户大多不会复购,不利于卖家的长远利益。因此对于卖家来说,定位较大概率会复购的用户很重要,可以降低营销成本并提高ROI。

阿里天池提供了在“双十一”期间的一组卖家及其相应的新买家数据集,包括这些新买家在前半年的购物行为日志,以及在后半年是否有复购的记录。

通过对上述数据集的挖掘分析,预测新用户的复购行为,为店铺运营提供高效的营销决策。

1.2数据集范围和结构

数据集来自淘宝抽取的一组某年双11期间店铺的新买家,并采集了这批用户的前半年用户日志、用户信息<user_info>,以及后半年是否有在该店铺复购的数据,数据均转换处理过,详细字段见比赛数据页面,数据关系结构如下:
在这里插入图片描述

基于上述数据集的关系,在处理数据时要注意以下几点:

(1)用户日志及信息是基于用户匹配的,所以user_log中的店铺数量要多于format中的;

(2)由于是新卖家,所以format表中与log表中基于用户和店铺的购买信息并无交集;

(3)train_format和test_format基于用户和店铺是无交集的,但是基于用户是有交集的;

2.分析思路和方法

案例运用特征工程的方法论进行用户复购行为预测,以下是三个挖掘分析重点:

(1)理解分析业务逻辑

用户复购行为,考虑用户自身因素和商家因素,一般来说是商家提供的产品和服务能较好地满足用户需求;
在这里插入图片描述

对于上述商品需求、消费水平等都是定性因素,我们需要将其分解成尽量多的可量化的业务数据指标,这些指标需要逻辑上可解释、可计算,数据表现有差异和各指标间相对独立;
在这里插入图片描述

(2)挖掘复购行为的特征

经探索性数据分析后,通过对比分析,相关性分析,降维,构造等方式,筛选指标生成特征,并将特征数据转换成合适的类型(常见的有log变换,u变换,比例等)用于建模。发现或构造特征比较有意思的,有创造性的工作很香,但最基本的是要考虑周全,先有锦,再添花。

一种蠢蠢的但是又不错的方式是考虑所有的维度的相互组合和限制:比如说案例中的用户消费行为,从统计方面上可以考虑次数,平均数,最大最小值,比例等;与时间维度组合可以考虑XX时间范围内的购买次数,XX时间范围内的购买频率加权等,与商品大类维度组合可考虑用户商品需求方向等。

需要注意的是,很多维度的数据需要同时考虑绝对值及比例,不然容易出现著名的辛普森悖论

(3)选择合适的模型

比较过多元线性回归、随机森林及lightgbm,发现lightgbm在运行时间及预测准确度上都高于其他,故使用lightgbm(其实为什么好这么多,我也不是很清楚原理哈哈哈哈,会开车的人也不一定会造车,不过后面一定得补上,不然容易翻车-. -)。

3.探索性数据分析 (关键步骤和方法)
3.1探索数据结构/缺失值/异常值

(1)数据大小和特征

user_log.shape               #数据行列
user_log.dtypes              #字段数据类型
user_log.nunique()           #字段去重值

(2)缺失值处理

user_log.isnull().sum()
#发现年龄性别上有NaN,因有明确意义,所以不处理  
#发现brandid有空值,不处理,它代表的是它没有品牌或者品牌没有收录到官方数据中

(3)异常值处理
#从上面的nunique()中看到没什么异常值
#时间维度上是5月11-11月21,很正常
#商品,店铺等字段数据类型都一样,认为其没有异常值

3.2数据对比分析

由于目标是预测复购行为,那么基于用户是否有在同一店铺复购过,将user_log分成半年内复购过的用户群及无复购的用户群进行对比分析,对比发现差异。

(1)各维度数据描述统计对比分析

(2)年龄性别对比分析

从均值和方差上看,复购用户各项均值都明显高于不复购用户,说明复购群体浏览更多类别,商店,登录次数更多,从方差上看,复购群体方差也明显大,说明复购行为用户群数据差异大,推测这些指标都是“弱指标”。
在这里插入图片描述

#该板块用到的方法或函数:
#isin(),用于筛选字段值的方法之一,a[a[b].isin(c)],返回a的b字段含有c的行,相反的用法a[~(a[b].isin(c))]
#groupby(),对dataframe进行分组,后可加上聚合函数;
#nunique(),聚合函数之一,统计字段中的的唯一值
#count(),聚合函数之一,统计字段中的个数
#describe(),描述字段的统计性数据
#drop_duplicates(),按一定的方式去除字段中的重复值
#pd.merge(),dataframe的连接函数
#reset_index(),重置dataframe的index
#rename(),改字段,索引等名
#assign(),添加新字段,可以避免dataframe的copywarning问题
3.3复购数据分析

除了将用户分群,对比分析各维度数据外,从逻辑上看,用户的本身的复购行为次数,店铺的销售数与重复销售数,以及用户与店铺之间的匹配度对预测的贡献应该更大。

(1)复购用户数据分析

a.用户在同一店铺复购次数

b.在多少个店铺复购过

c.店铺复购率

d.复购平均次数

(2)店铺销售与重销售分析

a.店铺的销售数量

b.店铺重销售数量

c.重销售比例

(3)用户-店铺匹配分析

a.新复购用户在之前在同类店铺的购买次数

#可以考虑将店铺根据商品大类聚类后计算销售比例,但由于数据的局限性且不可溯源,这里就没这样做。

#该板块用到的方法或函数与上面基本相同,都是一些处理dataframe的函数。

4.整理特征

经上述分析后,已经基本可以确定哪些因素跟复购是有联系的,在复购和不复购的群体中是有差别,接下来就是要对这些数据进行计算处理

4.1数据变换

scikit-learn库中的preproccessing类,提供了很多数据变换的方法,如:标准化:StandardScaler(),区间化:MinMaxScaler()等,
在这里插入图片描述

4.2相关性分析

特征处理好后,可以用相关性来进行特征筛选,python中有简便的函数corr(),求相关系数,相关系数越大认为与预测结果越相关。店铺重销售率、新用户此前在同类商店中购买次数及店铺重销售数的与复购行为相关性较高,其实也挺符合常理的。
在这里插入图片描述

5.跑模型

选lightgbm的原因上面有提到,但是这个模型让我惊艳之处是:
在这里插入图片描述

6.小结:

模型算法能大大推动实际业务,实现更精准、高效的营销,以此案例为例,根据预测结果可采取下述措施:

1.对经预测的高概率复购的用户发放更大额的优惠券,提高复购用户的转化率和长期收益。

2.根据自身用户的复购周期,对预测高概率高的,超出复购周期还没复购的用户,与预测概率低的用户,做差异化的召回活动。

3.持续跟进复购行为,挖掘更多更好的特征。

不足之处(仅限于我察觉到的不足):

1.理论上无法对对半年内的新用户(数据日志很少)进行预测。

2.特征不够细致,如上面提到的店铺分类可能效果更好

3.数据维度不够多,如消费金额,购买时有无用优惠券,各店铺是否包邮等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户复购行为预测--数据挖掘分析案例(天池/python) 的相关文章

  • 百度网盘提取码_百度网盘提取码查询工具,老菜建议大家收藏备用!

    APP菜园 打造属于我们自己的APP帝国 1 打开支付宝app 首页搜索 8221050 然后点击快捷功能 天天领红包 2 软件领取流程 1 认真阅读下软件介绍 2 找到图片下方的 获取链接 复制 3 打开手机上的浏览器粘贴链接搜索 百度云
  • Unity学习笔记(一)结构体的简单理解与应用

    Unity中的结构体的简介与使用 一 Unity中的结构体是什么 二 结构体与类的不同 一 Unity中的结构体是什么 简单来说 在 C 中 结构体是值类型数据结构 它使得一个单一变量可以存储各种数据类型的相关数据 例如我定义了一个结构体
  • Mybatis使用IN语句查询

    一 简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用 select from HealthCoupon where useType in 4 3 但是如果在MyBatis中的使用in的话 像如下去做的话 肯定会报错 Map
  • FFMPEG进阶系列02-ffmpeg命令详解3

    ffmpeg 的封装转换 FFmpeg的封装转换部分 主要是通过libavformat这部分来完成的功能 通过libavformat库进行mux和demux操作 多媒体文件的格式有很多种 但是还是有好多demux与mux的操作参数是公用的
  • 代码随想录算法训练营day1

    代码随想录算法训练营第一天 704 二分查找 27 移除元素 704 二分查找 题目链接 leetcode704 Binary search 暴力解法 class Solution public int search vector
  • 第01课:以太坊节点部署及基本命令操作

    第01课 以太坊节点部署及基本命令操作 区块链诞生自中本聪的比特币 自 2009 年以来 出现了各种各样的类比特币的基于公有区块链的数字货币 目前各个国家及企业机构都对区块链投入巨大的财力和人力来对区块链技术进行研究 官方文档 https
  • mapper-spring-boot-starter 主要作用是

    今天是第一次接触到 这个场景启动器内心中真是一片的茫然 学习了这么长时间我居然还不知道有这个的存在今天好好查一查资料 参考资料 https blog csdn net crq1205 article details 88040582 MyB
  • 【Metashape精品教程1】 软件介绍

    Metashape精品教程1 软件介绍 概述 一 软件功能 二 软件优点 三 软件缺点 四 软件安装 概述 Agisoft Metashape是一款独立的数字摄影测量软件 能够处理航空 近景摄影 卫星等获取的影像数据 生成相应的数据产品 该
  • Unity5中叹为观止的实时GI效果

    原地址 今天为大家分享 unity与Alex Lovett共同使用 unity5制作的Shrine Arch viz Demo 其中充分利用了Unity5的实时全局光照功能 实在是太过惊艳 随便一帧都可以直接拿来当做屏保 上面的Demo使用
  • java trim 空指针_trim()空指针异常问题!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 先上程序 import java io BufferedReader import java io File import java io FileReader public class Dis
  • springboot实现文件的上传下载

    SpringBoot文件上传与下载 文件的上传与下载 在springmvc阶段要实现文件的上传下载 需要的依赖 gt gt
  • gdb调试命令的使用及总结

    gdb是一个在UNIX环境下的命令行调试工具 如果需要使用gdb调试程序 请在gcc时加上 g选项 下面的命令部分是简化版 比如使用l代替list等等 1 基本命令 命令 描述 backtrace 或bt 查看各级函数调用及参数 finis
  • Python字符编码及转换

    Python字符编码及转换 在Python开发中 我们经常需要处理不同的字符编码问题 因为在不同的系统 平台 语言之间 字符编码的表示方式是不同的 本文将介绍Python中常见的字符编码以及它们之间的转换方法 ASCII字符集 ASCII
  • Linux保护文件实现,Linux完整性保护机制模块实现分析(1)

    原标题 Linux完整性保护机制模块实现分析 1 2 详细分析2 1 模块功能描述 文件系统完整性模块包含四种机制 监控磁盘机制 同步机制 检查修复文件系统机制 监视文件系统机制 1 监控磁盘机制主要由statfs by dentry vf
  • Maven安装(超详解)

    2 4 1 下载 下载地址 Maven Download Apache Maven 在提供的资料中 已经提供了下载好的安装包 如下 2 4 2 安装步骤 Maven安装配置步骤 解压安装 配置仓库 配置Maven环境变量 1 解压 apac
  • 生成csv

    package com study csv import java io File import java io FileNotFoundException import java io FileOutputStream import ja
  • python 行转列与气泡图,echarts玫瑰图画图

    原数据 stack data stack to frame head 10 unstack data pd read excel Users bella Desktop 考研 xlsx dropna data data set index
  • 经典坐标变换案例代码剖析

    题目 设有小萝卜一号和小萝卜二号位于世界坐标系中 记世界坐标系为W 小萝卜们的坐标系为R1和 R2 小萝卜一号的位姿为q2 0 35 0 2 0 3 0 1 T t1 0 3 0 1 0 1 T 小萝卜二号的位姿为q2 0 5 0 4 0
  • 镜像下载网站(全网最全)

    几家企业提供的镜像站 阿里云开源镜像 http mirrors aliyun com 搜狐开源镜像 http mirrors sohu com 网易开源镜像 http mirrors 163 com LUPA http mirror lup
  • Vue的详细教程--基础语法【上】

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于Vue的相关操作吧 目录 Welcome Huihui s Code World 一 插值 1 文本 2 html 3 属性 class绑定 style绑定

随机推荐

  • 西门子200SMART(四) 程序块

    程序块是显示当前项目包含的程序列表 一般初始状态共有三个 主程序 子程序和中断程序 如下图 当然 鼠标右键选择某一个程序块 可以重命名 支持中文 然而一个项目中 只能有一个主程序 也必须有一个主程序 所以主程序是无法删除的 在初始状态下 想
  • 用pm2在本地部署服务器node项目,全栈实用技能,pm2部署node应用到服务器

    好东西就要拿来分享 不管你的目标是前端还是全栈 都值得一看 背景介绍 一般的 我们开发一个前端项目通常是在本地通过Node js搭一个服务器 所有的开发测试过程基本上都是在本地搞定 有时候 我们需要把我们的作品上线 好让更多的人能够访问到
  • 某网站hexin-v的解决方法,hexin-v的解密方法,hexin-v的生成方法

    前段时间做的项目 一直运行比较稳定 最近几天运行过程中异常退出 结果发现是某网站接口有变 使用谷歌chrome 对原网站进行调试 结果发现某个js页面有变化 以原有的hexin v生成方法 已经不能适用于最新的算法 本想偷偷懒从网络上找一下
  • Map和Set

    Map和Set是集合中的两个接口 Set实现了Collection接口 而Map没有实现 Map下面又有很多子类 我们主要研究HashMap和TreeMap Set同样有很多子类 主要研究HashSet和TreeSet 在理解掌握它们之前
  • FTP命令使用实例

    ftp命令是标准的文件传输协议的用户接口 ftp是在TCP IP网络上的计算机之间传输文件的简单有效的方法 它允许用户传输ASCII文件和二进制文件 在ftp会话过程中 用户可以通过使用ftp客户程序连接到另一台计算机上 从此 用户可以在目
  • LR.net敏捷软件开发平台核心功能详解

    软件开发 程序员就是不断地跟变量 方法 类 接口这些东西打交道 随着开发经验的积累 很多程序员会发现 虽然最终开发出来的软件每个都不一样 但是在开发过程中用到的很多东西却又是相通的 例如 每个软件的底层差不多都需要进行增删改查 文件操作 权
  • State 模式

    有限状态机 FSM Finite state machine 例子 1 若状态机在Locked状态收到了一个coin事件 则迁移到Unlocked状态并执行unlock动作 2 若状态机在UnLocked状态收到了一个pass事件 则迁移到
  • 基于Spark MLlib平台的协同过滤算法---电影推荐系统

    说到推荐系统 大家可能立马会想到协同过滤算法 本文基于Spark MLlib平台实现一个向用户推荐电影的简单应用 其中 主要包括三部分内容 协同过滤算法概述 基于模型的协同过滤应用 电影推荐 实时推荐架构分析 一 协同过滤算法概述 本人对算
  • npm安装Electron解决方案

    npm安装Electron解决方案 Electron使用npm安装时 因为是国外的镜像源 所以速度会非常慢 而使用cnpm如下命令进行安装时 又会出现安装失败的问题 npm install electron g execute post i
  • 第一阶段-第四章 Python的循环语句

    目录 前言 1 循环语句的运行方式 2 为什么要学习循环语句 3 本章的安排 一 while循环的基础语法 1 学习目标 2 while循环语句 3 本节的演示 4 while循环的注意点 5 本小节的总结 6 课后练习 二 while循环
  • 【JavaEE初阶】第三节.多线程基础篇

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 JavaEE初阶 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 目录 文章目录 前言 一 认识线程 二 多线程程序 2 1 第一个Java多线程程序 2 2 怎么样
  • 6.1 什么是面向对象以及类和对象的区别

    什么是面向对象 面向对象 面向对象编程的简称 Object Oriented Programming OOP 是一种对现实世界理解和抽象的方法 是计算机编程技术发展到一定阶段后的产物 早期的计算机编程是面向过程的 典型的代表是 C 语言 解
  • Redis数据类型及编码格式——Hash篇

    写在前面 以下的知识都是建立在目前线上稳定版6 2 6版本的 而目前github上的redis源代码又更新优化了许多 譬如 hash数据类型默认的编码格式已经被替换为listpack hashtable数据结构也被重新优化 哈希表对象dic
  • python/matlibplot绘制多条曲线图

    这里我利用的是matplotlib pyplot plot的工具来绘制折线图 这里先给出一个段代码和结果图 coding UTF 8 import numpy as np import matplotlib as mpl import ma
  • 动态添加“<input onclick=“‘+json+‘“>“元素传参时不识别json的bug问题解决

    问题描述 var json a 1 在html中使用js方法动态添加
  • Vim快捷键 - Vim Cheat Sheet

    请访问 https vim rtorr com lang zh cn 全局 h elp 关键字 打开关键字帮助 sav eas 文件名 另存为 clo se 关闭当前窗口 ter minal 打开一个shell窗口 K 打开光标所在单词的m
  • nfs文件服务器错误码5,使用5.4内核最新代码后作为nfs服务器只能列出共享的文件夹名称,点进去不能显示内容...

    反馈bug 问题模板 提建议请删除 1 关于你要提交的问题 Q 是否搜索了issue 使用 x 选择 没有类似的issue 2 详细叙述 1 具体问题 A 使用5 4内核最新代码后作为nfs服务器只能列出如 mnt sda3的共享的文件夹名
  • 【hortonworks/registry】诡异问题之启动了却无法访问

    1 背景 本地mac启动了registry 但是却无法访问页面 lcc lcc soft registry hortonworks registry 0 9 0 bin registry start lcc lcc
  • osgEarth的Rex引擎原理分析(一二八)rex的引擎和图层投影及其关系

    目标 一二七 中问题214 主要存在三个地方 一是map的type属性 可取两个值geocentric projected 前者用于三维显示 后者用于二维显示 二是map的options属性的srs 可以取spherical mercato
  • 用户复购行为预测--数据挖掘分析案例(天池/python)

    阿里天池新人赛中的一个 记录分享 Repeat Buyers Prediction Challenge the Baseline 天池大赛 阿里云天池 第一次提交 8简单特征 随机森林模型 score 0 5507327 排名 278 第二