O2O优惠券数据分析(一)

本文分析了O2O优惠券的数据,发现线下优惠券核销率低,主要因素包括满减门槛、折扣额度和门店距离。7%的优惠券被使用,其中79%的用户对优惠券不敏感。优惠券拉新效果有限,但小额满减和近距离门店的优惠券核销率较高。建议关注优惠券类型和用户营销。
摘要由CSDN通过智能技术生成

写在前面的话

本文的数据分析任务是我在几个月前为了准备面试锻炼自己的数据分析思路做的,项目中没有涉及到机器学习建模内容,是一个单纯用数据得出结论的任务。因为准备时间仓促,所以项目里待完善的内容很多。最后机缘巧合也没有去应聘数据分析师的工作,因此想把这个项目分享出来,希望对想准备数据分析面试的读者有所帮助。本文的数据集来自天池中一个O2O优惠券核销率预测的比赛,感兴趣的读者可以自行下载相关数据集。

数据介绍

本文所使用的数据集是关于O2O营销活动优惠券发放的,提供的数据集包括线上和线下两部分。在线下数据集中包括用户id,商家id,优惠券id,折扣率,用户经常活动地点离最近商家距离,收到优惠券的日期以及核销优惠券的日期。线上数据集中除了线上数据集中提供的信息外还提供了用户的线上行为,包括点击,购买和领取,但线上数据集不提供距离信息。在本次数据分析任务中我分成了三步对优惠券的核销行为进行分析,分别是线下行为,线上行为和线上线下共同用户的行为。

线下行为

首先导入本次分析任务要用到的所有python library。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.formula.api as smf 
import statsmodels.tsa.api as smt
import statsmodels.api as sm
import statsmodels.stats as sms
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.tsa.stattools import adfuller
import plotly.express as px
from plotly import graph_objects as go

数据清洗

# 读取线下数据集
offline_df=pd.read_csv('/content/drive/MyDrive/o2o/ccf_offline_stage1_train.csv')
offline_df.head()

 上面展示的就是线下数据集包含的字段。

print('线下消费行为数据{}行'.format(offline_df.shape[0]))

# 数据清洗
# 每个字段缺失值
offline_df.isnull().sum()

 

 首先我们可以看到数据集里面缺失值还是非常多的,那么为什么会出现这些缺失值呢?从上面缺失字段的统计可以发现Coupon_id, Discount_rate, Date_received三者确实数量一致符合数据逻辑,即没有领取优惠券的消费记录中不含有这三条信息。而Distance出现缺失值说明不能提供用户的位置信息,可能用户关闭了定位功能或用户活动范围内没有最近的门店。Date出现缺失值就说明用户在产生领取行为后没有核销优惠券。

根据我们之前分析的缺失值出现原因,分别制定不同的填充缺失值策略。对于没有领取优惠券的消费,我们可以把Coupon_id, Discount_rate填补为0且填补值不与这两个字段中其他取值冲突。因为Distance的取值为0-10,所以对于Distance的缺失值我们可以填充为11。

offline_df['Coupon_id'].fillna(0,inplace=True)
offline_df['Discount_rate'].fillna(0,inplace=True)
offline_df['Distance'].fillna(11,inplace=True)
offline_df.dtypes

通过观察数据类型,我们会发现有些字段的数据类型不太合理,比如Coupon_id, Distance,Date_received 和 Date。我们可以手动来转换这些字段的数据类型:

# 转换逻辑:Coupon_id及Distance应为整数型取值数据,Date_received和Date应为日期型数据
convert_dict={'Coupon_id':'int64','Distance':'int64'}
offline_df=offline_df.astype(convert_dict)
offline_df['Date_received']=pd.to_datetime(offline_df['Date_received'],format='%Y%m%d')
offline_df['Date']=pd.to_datetime(offline_df['Date'],format='%Y%m%d')

接下来,我们把没有核销优惠券的日期填充为自定义的dummy date,在这里我使用的是2021-01-01,因为数据集中的数据都是2016年的所以当然不会出现2021年的日期,也可以使用其他的日期来填充。

# 将没有消费的日期和没有领取优惠券的日期填充为dummy date
offline_df['Date_received'].fillna('2021-01-01',inplace=True)
offline_df['Date'].fillna('2021-01-01',inplace=True)
offline_df['Date_received']=pd.to_datetime(offline_df['Date_received'])
offline_df['Date']=pd.to_datetime(offline_df['Date'])

我们再来观察一下清理后的数据集:

offline_df.head()

和之前比整齐了许多,但是数据集中的Discount_rate这个字段是object类型在后续做分析的时候不太好利用,所以我使用了自己定义的逻辑来把Discount_rate转换成了数值型。

# 拆分discount_r
  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
O2O优惠券使用预测数据集 背景描述 随着移动设备的完善和普及,移动互联网+各行各业进入了高速发展阶段,这其中以O2O(Online to Offline)消费最为吸引眼球。 据不完全统计,O2O行业估值上亿的创业公司至少有10家,也不乏百亿巨头的身影。O2O行业天然关联数亿消费者,各类APP每天记录了超过百亿条用户行为和位置记录,因而成为大数据科研和商业化运营的最佳结合点之一。 以优惠券盘活老用户或吸引新客户进店消费是O2O的一种重要营销方式。然而随机投放优惠券对多数用户造成无意义的干扰。对商家而言,滥发的优惠券可能降低品牌声誉,同时难以估算营销成本。 个性化投放是提高优惠券核销率的重要技术,它可以让具有一定偏好的消费者得到真正的实惠,同时赋予商家更强的营销能力。 本数据集为研究人员提供了O2O场景相关的丰富数据,通过分析建模精准预测用户是否会在规定时间内使用相应优惠券。 数据说明 注意: 为了保护用户和商家的隐私,所有数据均作匿名处理,同时采用了有偏采样和必要过滤。 offline_train.csv | 用户线下消费和优惠券领取行为表 字段 说明 User id 用户ID Merchant id 商户ID Coupon id 优惠券ID:null表示无优惠券消费,此时 Discount_rate 和 Date_received 字段无意义 Discount rate 优惠率:x \in [0,1]代表折扣率;x:y表示满x减y。单位是元 Distance user经常活动的地点离该 merchant 的最近门店距离是 x * 500米(如果是连锁店,则取最近的一家门店),x\in[0,10];null 表示无此信息,0表示低于500米,10表示大于5公里; Date received 领取优惠券日期 Date 消费日期:如果 Date=null & Coupon_id != null,该记录表示领取优惠券但没有使用,即负样本;如果 Date!=null & Coupon_id = null,则表示普通消费日期;如果 Date!=null & Coupon_id != null ,则表示用优惠券消费日期,即正样本; online_train.csv | 用户线上点击/消费和优惠券领取行为表 字段 说明 User_id 用户ID Merchant_id 商户ID Action 0 点击, 1购买,2领取优惠券 Coupon_id 优惠券ID:null表示无优惠券消费,此时 Discount_rate 和 Date_received 字段无意义。“fixed”表示该交易是限时低价活动。 Discount_rate 优惠率:x \in [0,1]代表折扣率;x:y表示满x减y;“fixed”表示低价限时优惠; Date_received 领取优惠券日期 Date 消费日期:如果 Date=null & Coupon_id != null,该记录表示领取优惠券但没有使用,即负样本;如果 Date!=null & Coupon_id = null,则表示普通消费日期;如果 Date!=null & Coupon_id != null,则表示用优惠券消费日期,即正样本; offline_test.csv | 用户O2O线下优惠券使用预测样本 字段 说明 User_id 用户ID Merchant_id 商户ID Coupon_id 优惠券ID Discount_rate 优惠率:x \in [0,1]代表折扣率;x:y表示满x减y. Distance user经常活动的地点离该merchant的最近门店距离是 x * 500米(如果是连锁店,则取最近的一家门店),x\in[0,10];null表示无此信息,0表示低于500米,10表示大于5公里; Date_received 领取优惠券日期 研究人员需要为上述预测表预测出15天内用户线下使用优惠券的概率,其中 user_id, coupon_id 和 date_received 均来自上述预测样本, 而 Probability 为预测值。 字段 说明 Coupon_id 优惠券ID Date_received 领取优惠券日期 Probability 15天内用券概率,需预测给出 问题描述 数据提供了用户在2016年1月1日至2016年6月30日之间真实线上线下消费行为,可以预测用户在2016年7月领取优惠券后15天以内的使用情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值