百货商场用户画像描绘与价值分析

目录

  • 内容概述
  • 数据说明
  • 实现目标
  • 技术点
  • 主要内容
    • 导入模块
    • 1.项目背景
      • 1.1 项目背景与挖掘目标
    • 2.数据探索与预处理
      • 2.1 结合业务对数据进行探索并进行预处理
      • 2.2 将会员信息表和销售流水表关联与合并
    • 3 统计分析
      • 3.1 分析会员的年龄构成、男女比例等基本信息
      • 3.2 分析会员的总订单占比,总消费金额占比等消费情况
      • 3.3 分别以季度和天为单位,分析不同时间段会员的消费时间偏好
    • 4 会员用户画像和特征字段创造
      • 4.1 构建会员用户基本特征标签
      • 4.2 会员用户词云分析
    • 5 会员用户细分和营销方案制定
      • 5.1 会员用户的聚类分析及可视化
      • 5.2 对会员用户进行精细划分并分析不同群体带来的价值差异
  • 附录

内容概述

本项目内容主要是基于Python的“百货商场用户画像描述与价值分析”,里面有详细的数据预处理、数据可视化和数据建模等步骤。同时,针对传统RFM模型进行了改进,构造了LRFMP模型来分析客户价值,挖掘客户价值的八个字段,并通过WordCloud形式展现了出来,可以对会员用户进行精准画像。

数据说明

数据集分为两部分,.xlsx结尾的是会员信息表,.csv结尾的是销售流水表。其中,会员信息表共有将近19万条记录,销售流水表共有接近189万条记录。

两个表包含了如会员卡号,消费产生时间,性别,出生时间,商品编码,销售数量,商品售价,消费金额,商品名称,此次消费的会员积分,收银机号,单据号,柜组编码,柜组名称,等级时间等 15 个特征。

  • L(入会程度):3个月以下为新用户,4-12个月为中等用户,13个月以上为老用户
  • R(最近购买的时间)
  • F(消费频次):次数20次以上的为高频消费,6-19次为中频消费,5次以下为低频消费
  • M(消费金额):10万以上为高等消费,1万-10万为中等消费,1万以下为低等消费
  • P(消费积分):10万以上为高等积分用户,1万-10万为中等积分用户,1万以下为低等积分用户

实现目标

本项目主要围绕着“百货商店会员用户画像描绘与价值分析”内容进行,结合目前百货商场的数据情况,可以实现以下目标:

  1. 借助百货商场会员用户数据,对会员用户进行分群。
  2. 对不同的会员用户类别进行特征分析,比较不同类别会员用户的会员用户价值。
  3. 对不同价值的会员用户类别提供个性化服务,制定相应的营销策略。

技术点

  • 数据预处理(Pandas):包括去重去缺失值、异常值处理、变量重编码和时间序列数据处理方式等;
  • 数据可视化(Matplotlib):饼图、柱状图、折线图、雷达图和复合图等绘制方式等;
  • 特征创造和数据建模:从海量连续数据中创造出性别、消费偏好、入会程度、最近购买的时间、消费频次、消费金额、消费积分等类别数据,建模部分主要通过标准化和归一化数据来对比KMeans聚类的轮廓系数结果。

代码运行说明

注意:运行此文件后会生成一些中间数据集以及相关图片

主要内容

导入模块

在这里插入图片描述

1.项目背景

1.1 项目背景与挖掘目标

在这里插入图片描述
在这里插入图片描述

2.数据探索与预处理

2.1 结合业务对数据进行探索并进行预处理

会员信息表数据探索与预处理

在这里插入图片描述
从上面会员信息表进行分析可以看出,数据中会员卡号存在一些重复值,且会员入会登记时间都有缺失,需要去重去缺失值,因为性别比例缺失较少,所以用众数来填补性别上的缺失值

注意:这里存在部分会员登记时间小于出生时间,因为这列数据所占比例较少,可以直接进行删除 和下面有所不同
在这里插入图片描述
在这里插入图片描述
检验是否在“登记时间”这一字段上是否存在异常值,若存在异常值,则无法进行基础的运算操作,下面操作能正常执行,说明不存在异常值

在这里插入图片描述
查看处理后数据缺失值情况
在这里插入图片描述
注意:由于出生日期这一列的缺失值过多,且存在较多的异常值,不能贸然删除

所以下面这里另建了一个数据集L来保存“出生日期”和“性别”信息,方便下面对会员的性别和年龄信息进行统计
在这里插入图片描述

出生日期这列值出现较多的异常值,以一个正常人寿命为100年算起,我们假定会员年龄范围在1920-2020之间,将超过该范围的值当作异常值进行剔除

在这里插入图片描述
用于与销售流水表进行合并的数据只取[‘会员卡号’, ‘性别’, ‘登记时间’]这三列,将出生日期这列意义不大的进行删除(这列信息最有可能出错),并重置索引
在这里插入图片描述
在这里插入图片描述
销售流水表数据探索和预处理

在这里插入图片描述
在这里插入图片描述

销售数量全部大于0,销售金额也全部大于0,说明两者不会对后者特征创造时产生影响
在这里插入图片描述
查看是否存在缺失值

在这里插入图片描述

会员信息表和销售流水表这两张表唯一相关联的字段便是“会员卡号”

由于销售流水表中“会员卡号”有将近一半为缺失值,这类数据无法进行填充,且后续需要对会员消费记录进行统计分析和建模,故只能舍弃
在这里插入图片描述
可以看到,舍弃掉会员卡号缺失值之后,便只有柜组名称存在缺失,下面舍弃掉一些无意义的字段,仅保留对本项目有研究价值的字段信息
在这里插入图片描述
在这里插入图片描述

2.2 将会员信息表和销售流水表关联与合并

在这里插入图片描述
按照会员卡号将两张表里的信息进行合并,使用左连接合并,获得一个既包含会员信息,又包含非会员信息的数据
在这里插入图片描述这里再次查看“消费金额”>0,“积分”>0,“销售数量”>0
在这里插入图片描述
这里可以看到,merge之后的数据异常值突然变多了,这里就需要对此进行预处理,筛选掉那些异常值,方便后续进行分析

创造一个特征字段,判断是否为会员,1表示为会员,0表示不为会员
在这里插入图片描述

3 统计分析

3.1 分析会员的年龄构成、男女比例等基本信息

处理男女比例这一列,女表示0,男表示1
在这里插入图片描述
可以将年龄划分为老年(1920-1950)、中年(1960-1990)、青年(1990-2010),再重新绘制一个饼图,
在这里插入图片描述

使用上述预处理后的数据集L,包含两个字段,分别是“年龄”和“性别”,先画出年龄的条形图
在这里插入图片描述

在这里插入图片描述
绘制各个年龄段的饼图
在这里插入图片描述
在这里插入图片描述

3.2 分析会员的总订单占比,总消费金额占比等消费情况

由于相同的单据号可能不是同一笔消费,以“消费产生的时间”为分组依据,我们可以知道有多少个不同的消费时间,即消费的订单数
在这里插入图片描述

在这里插入图片描述

3.3 分别以季度和天为单位,分析不同时间段会员的消费时间偏好

消费偏好:我偏向与消费的频次相当于消费的订单数,因为每笔消费订单其中所包含的消费商品和金额都是不太一样的,有的订单所消费的商品很少,但金额却很大,有的消费的商品很多,但金额却特别少。如果单纯以总金额来衡量的话,会员下次消费时间可能会很长,消费频次估计也会相对变小(因为这次所购买的商品已经足够用了)。所以我会偏向于认为一个用户消费频次(订单数)越多,就越能带来更多的价值,从另一方面上来讲,用户也不可能一直都是消费低端产品,消费频次越多用户的粘性也会相对比较大

将会员的消费数据另存为另一个数据集
在这里插入图片描述
在这里插入图片描述
自定义一个函数来计算2015-2018之间每个季度或月份的消费订单均数
在这里插入图片描述
前提假设:2015-2018年之间,消费者偏好在时间上不会发生太大的变化(均值),消费偏好----->以不同时间的订单数来衡量
在这里插入图片描述在这里插入图片描述
自定义函数来绘制不同年份之间的的季度或天数的消费订单差异

函数说明
df: 为DataFrame的数据集
label_y: 为年份的字段标签
label_m: 为标签的一个列表
n_row: 图的行数
n_col: 图的列数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
自定义函数来绘制不同年份之间的月份消费订单差异

函数说明:
df: 为DataFrame的数据集
label_y: 为年份的字段标签
label_m: 为月份的字段标签

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
再来分析下时间上的差差异——消费订单数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 会员用户画像和特征字段创造

4.1 构建会员用户基本特征标签

在这里插入图片描述

说明积分这一列没有存在异常值
在这里插入图片描述
在这里插入图片描述
查看登记时间和消费产生的时间是否存在异常值,即大于2018-01-03
在这里插入图片描述

筛掉两列异常时间的数据

在这里插入图片描述

说明单个会员有多条消费记录数
在这里插入图片描述
可以先筛选每位会员,然后依据各个字段对进行运算,求出对应的LRFMP

自定义一个函数来实现两列数据时间相减

函数说明:
df: 为DataFrame形式,有列数据,第一列为“会员卡号”,第二列为被减的时间
end_time: 结束时间

在这里插入图片描述
开始登记的时间 和 最后一次消费的时间
在这里插入图片描述

调用函数
在这里插入图片描述
会员消费的总次数:
会员消费的总金额:
会员的积分总数:
在这里插入图片描述

创造一列特征字段“消费时间偏好”(凌晨、上午、中午、下午、晚上)

说明:
凌晨:0-5点
上午:6-10点
中午:11-13点
下午:14-17点
晚上:18-23点

在这里插入图片描述
会员消费的时间偏好,在多项记录中取众数
在这里插入图片描述
会员性别
在这里插入图片描述
开始构建对应的特征标签

在这里插入图片描述

在这里插入图片描述
构建会员用户业务特征标签

取DataFrame之后转置取values得到一个列表,再绘制对应的词云,可以自定义一个绘制词云的函数,输入参数为df和会员卡号

L: 入会程度(新用户、中等用户、老用户)
R: 最近购买的时间(月)
F: 消费频数(低频、中频、高频)
M: 消费总金额(高消费、中消费、低消费)
P: 积分(高、中、低)
S: 消费时间偏好(凌晨、上午、中午、下午、晚上)
X:性别
在这里插入图片描述
在这里插入图片描述
查看数据的基本特征

在这里插入图片描述
描述性统计
在这里插入图片描述
开始对数据进行分组

L(入会程度):3个月以下为新用户,4-12个月为中等用户,13个月以上为老用户
R(最近购买的时间)
F(消费频次):次数20次以上的为高频消费,6-19次为中频消费,5次以下为低频消费
M(消费金额):10万以上为高等消费,1万-10万为中等消费,1万以下为低等消费
P(消费积分):10万以上为高等积分用户,1万-10万为中等积分用户,1万以下为低等积分用户
在这里插入图片描述
保存数据

在这里插入图片描述

4.2 会员用户词云分析

开始绘制用户词云,封装成一个函数来直接显示词云

函数说明:
df: 为DataFrame的数据集
id_label: 为输入用户的会员卡号,默认为随机取一个会员进行展示

在这里插入图片描述

随机查找一个会员来绘制用户画像
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5 会员用户细分和营销方案制定

5.1 会员用户的聚类分析及可视化

先对数据进行标准化处理
在这里插入图片描述

对数据进行聚类
在这里插入图片描述

在这里插入图片描述

构造一个绘制聚类可视化效果雷达图的函数

函数说明:
features: 字段名
clf_list:list,为聚类器列表
nrow: 图的行数
ncol: 图的列数
title: 图的名称

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

从上面可以看出,标准化后的数据聚类效果相较于归一化的更好,且从轮廓系数和聚类雷达图也可以看出,聚类数最佳为2。因此,下面我们使用聚类数为2的标准化数据进行聚类,得到两类客户的LRFMP均值数据,以此来判断两者之间的差异

5.2 对会员用户进行精细划分并分析不同群体带来的价值差异

以聚类数为2贴上对应的标签
在这里插入图片描述
统计一下两类用户之间的差异,发现两类客户之间数量相差过大
在这里插入图片描述
用均值来计算两类样本之间的LRFMP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
从上面可以看出,标签为1的客户消费频次、消费金额和消费积分均远大于标签为0的客户,且这类客户所占的比例仅有2.3%,可以将其定义为“重要保持会员”。标签为0的客户所占比例为97.7%,其会员登记时间跟标签为1的比较接近,但最近一次消费时间较标签1的还要长,可以将其定义为“一般发展会员”


附录

百货商场用户画像描绘与价值分析附录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/550368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 入门指南(四)

原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者:飞龙 协议:CC BY-NC-SA 4.0 第十章:哈希和符号表 我们之前看过列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整…

使用 Docker 部署 SurveyKing 调查问卷系统

1)SurveyKing 介绍 SurveyKing 是一款功能强大、操作简便的开源问卷系统。它不仅满足了用户对问卷调查的基本需求,还提供了丰富的逻辑设置和灵活的问题设置,使得问卷制作更加智能化和个性化。此外,SurveyKing 还具有快速部署和安全…

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

对应于其强大的能力,大语言模型 (LLM) 需要强大的算力支撑,而个人计算机上很难满足这一需求。因此,我们别无选择,只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上。 为何需要将 LLM 推理本地化 如果我们可以在典配…

elmentui树形表格使用Sortable拖拽展开行时拖拽bug

1、使用elemntui的el-table使用Sortable进行拖拽,如下 const el this.$el.querySelector(.el-table__body-wrapper tbody) Sortable.create(el, {onEnd: (event) > {const { oldIndex, newIndex } event//拿到更新前后的下标即可完成数据的更新} })2、但是我这…

docker 环境变量设置实现方式

1、前言 docker在当前运用的越来广泛,很多应用或者很多中间软件都有很多docker镜像资源,运行docker run 启动镜像资源即可应用。但是很多应用或者中间件有很多配置参数。这些参数在运用过程怎么设置给docker 容器呢?下面介绍几种方式 2 、do…

Day91:API攻防-接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

目录 API分类特征-SOAP&OpenAPI&RESTful API分类特征 API常见漏洞 API检测流程 API检测项目-Postman&APIKit&XRAY 工具自动化-SOAP - WSDL Postman 联动burpxray APIKit插件(可联动xray) 工具自动化-OpenApi - Swagger Postman 联动burpxray APIKit…

HarmonyOS开发实例:【分布式邮件】

概述 基于TS扩展的声明式开发范式编程语言编写的一个分布式邮件系统,可以由一台设备拉起另一台设备,每次改动邮件内容,都会同步更新两台设备的信息。效果图如下: 搭建OpenHarmony开发环境 完成本篇Codelab我们首先要完成开发环境…

OpenStack:开源云计算的崛起与发展

目录 一,引言 二,OpenStack的起源 三,OpenStack的版本演进 四,OpenStack跟虚拟化的区别 五,OpenStack组件介绍 1)Horizon介绍 2)KeyStone介绍 Keystone 功能概览 Keystone 架构详解 3&a…

RabbitMQ 各种通信模式的Python实现

一、RabbitMQ 原理 1、基本原理 RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,如:Python、Java、Javascript、C#、C/C,Go等,支持AJ…

RabbitMQ Stream插件使用详解

2.4版为RabbitMQ流插件引入了对RabbitMQStream插件Java客户端的初始支持。 RabbitStreamTemplateStreamListener容器 将spring rabbit流依赖项添加到项目中&#xff1a; <dependency><groupId>org.springframework.amqp</groupId><artifactId>sprin…

【echarts】使用 ECharts 绘制3D饼图

使用 ECharts 绘制3D饼图 在数据可视化中&#xff0c;饼图是表达数据占比信息的常见方式。ECharts 作为一个强大的数据可视化库&#xff0c;除了标准的二维饼图&#xff0c;也支持更加生动的三维饼图绘制。本文将指导你如何使用 ECharts 来创建一个3D饼图&#xff0c;提升你的…

百度智能云万源全新一代智能计算操作系统发布:引领AI新纪元,开启智能未来

随着科技的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;逐渐渗透到我们生活的每个角落&#xff0c;为人类社会带来前所未有的变革。在这场科技革命的浪潮中&#xff0c;百度作为中国AI领域的领军企业&#xff0c;始终站在技术创新的前沿&#xff0c;不断引领行业发…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈&#xff0c;实现一个队列功能 add delete length 队列 用数组可以实现队列&#xff0c;数组和队列的区别是&#xff1a;队列是逻辑结构是一个抽象模型&#xff0c;简单地可以用数组、链表实现&#xff0c;所以数组和链表是一个物理结构&#xff0c;队列是一个逻…

Rust腐蚀服务器修改背景和logo图片操作方法

Rust腐蚀服务器修改背景和logo图片操作方法 大家好我是艾西一个做服务器租用的网络架构师。在我们自己搭建的rust服务器游戏设定以及玩法都是完全按照自己的想法设定的&#xff0c;如果你是一个社区服那么对于进游戏的主页以及Logo肯定会有自己的想法。这个东西可以理解为做一…

MaxCompute 近实时增全量处理一体化新架构和使用场景介绍

随着当前数据处理业务场景日趋复杂&#xff0c;对于大数据处理平台基础架构的能力要求也越来越高&#xff0c;既要求数据湖的大存储能力&#xff0c;也要求具备海量数据高效批处理能力&#xff0c;同时还可能对延时敏感的近实时链路有强需求&#xff0c;本文主要介基于 MaxComp…

Docker安装xxl-job分布式任务调度平台

文章目录 Docker安装xxl-job分布式任务调度平台1.xxl-job介绍2. 初始化“调度数据库”3、docker挂载运行xxl-job容器3.1、在linux的opt目录下创建xxl_job文件夹&#xff0c;并在里面创建logs文件夹和application.properties文件3.2、配置application.properties文件&#xff0c…

基于Qt的二维码生成与识别

基于Qt的二维码生成与识别 一、获取QZxing开源库 1.通过封装的QZxing开源库生成和识别二维码&#xff0c;下载地址&#xff1a;GitCode - 开发者的代码家园https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。 2.下载解压后&#xff0c;使用Qt Creator xx&#xff0…

Yolo-world+Python-OpenCV之摄像头视频实时目标检测

上一次介绍了如何使用最基本的 Yolo-word来做检测&#xff0c;现在我们在加opencv来做个实时检测的例子 基本思路 1、读取离线视频流 2、将视频帧给yolo识别 3、根据识别结果 对视频进行绘制边框、加文字之类的 完整代码如下&#xff1a; import datetimefrom ultralytics …

使用undetected-chromedriver遇到的问题及解决方法,以及它使用SOCKS代理的问题

环境&#xff1a;python3.8.10 uc的安装方法&#xff1a; pip38 install undetected-chromedriver 上测试代码&#xff1a; import undetected_chromedriver as uc driver uc.Chrome() driver.get(https://www.baidu.com) driver.save_screenshot(baidu.png)报错&#xff…

如何用JAVA如何实现Word、Excel、PPT在线前端预览编辑的功能?

背景 随着信息化的发展&#xff0c;在线办公也日益成为了企业办公和个人学习不可或缺的一部分&#xff0c;作为微软Office的三大组成部分&#xff1a;Word、Excel和PPT也广泛应用于各种在线办公场景&#xff0c;但是由于浏览器限制及微软Office的不开源等特性&#xff0c;导致…