当前位置: 首页 > news >正文

2018年国赛高教杯数学建模C题大型百货商场会员画像描绘解题全过程文档及程序

2018年国赛高教杯数学建模

C题 大型百货商场会员画像描绘

原题再现

  在零售行业中,会员价值体现在持续不断地为零售运营商带来稳定的销售额和利润,同时也为零售运营商策略的制定提供数据支持。零售行业会采取各种不同方法来吸引更多的人成为会员,并且尽可能提高会员的忠诚度。当前电商的发展使商场会员不断流失,给零售运营商带来了严重损失。此时,运营商需要有针对性地实施营销策略来加强与会员的良好关系。比如,商家针对会员采取一系列的促销活动,以此来维系会员的忠诚度。有人认为对老会员的维系成本太高,事实上,发展新会员的资金投入远比采取一定措施来维系现有会员要高。完善会员画像描绘,加强对现有会员的精细化管理,定期向其推送产品和服务,与会员建立稳定的关系是实体零售行业得以更好发展的有效途径。
  附件中的数据给出了某大型百货商场会员的相关信息:附件1是会员信息数据;附件2是近几年的销售流水表;附件3是会员消费明细表;附件4是商品信息表,一般来说,商品价格越高,盈利越高;附件5是数据字典。请建立数学模型解决以下问题:
  (1) 分析该商场会员的消费特征,比较会员与非会员群体的差异,并说明会员群体给商场带来的价值。
  (2) 针对会员的消费情况建立能够刻画每一位会员购买力的数学模型,以便能够对每个会员的价值进行识别。
  (3) 作为零售行业的重要资源,会员具有生命周期(会员从入会到退出的整个过程),会员的状态(比如活跃和非活跃)也会发生变化。试在某个时间窗口,建立会员生命周期和状态划分的数学模型,使商场管理者能够更有效地对会员进行管理。
  (4) 建立数学模型计算会员生命周期中非活跃会员的激活率,即从非活跃会员转化为活跃会员的可能性,并从实际销售数据出发,确定激活率和商场促销活动之间的关系模型。
  (5) 连带消费是购物中心经营的核心,如果商家将策划某次促销活动,如何根据会员的喜好和商品的连带率来策划此次促销活动?

整体求解过程概述(摘要)

  电商的快速发展给零售运营商带来了较大的冲击,为了持续获取稳定的销售额和利润,零售运营商需完成对会员的管理与维系工作。完善会员画像,加强会员管理,维持会员稳定将使得零售业更好地发展。
  本文利用该大型百货商场提供的会员信息以及消费明细,完善该商场的会员画像。本文从购买力、购买时间偏好、消费偏好三个维度分析会员的消费特征。以会员消费总金额、消费次数、商品购买数量代表会员购买力,同时按季节对会员消费行为进行分析,随后以特价商品、高价商品消费金额在会员总消费金额的占比分析会员的消费偏好。
  为进一步说明会员群体给商场带来的价值,本文对比了会员与非会员的购买力。会员群体的消费总金额和商品购买数量略低于非会员群体,原因或是非会员群体人数较多。但是绘制两类群体的日消费金额曲线后可知,与非会员群体相比,会员的单日消费总金额增幅较大。
  为刻画会员的购买力,本文建立了RFMT模型。分别选取会员最后一次消费的时间间隔、消费频率、总金额、单次购买最高金额作为指标,结合层次分析法得到相应指标的权重,并计算出每个会员的得分,会员得分则代表着会员的个人价值。利用K-means聚类的方法,根据会员得分进行聚类,得分较高的会员群体则为商场需要维护的会员群体。
  为了合理地判断会员所处的生命周期,本文利用已构建的RFMT模型中的相关指标,再次使用K-means聚类的方法对该商场的会员进行聚类,将现有会员划分为活跃会员、沉默会员、流失会员三类,以便商场管理者对会员进行管理。在会员的生命周期中,会员状态处于动态变化的过程。为了增加商场的利润,与发展新会员相比,促进非活跃会员转化为活跃会员会大大降低商场的成本。本文通过构建非活跃会员的相关指标,使用因子分析法,可计算得各非活跃会员激活率,激活率越高,则其被激活的可能性则越大。同时,本文以非活跃会员的特价商品消费金额在总消费金额中的占比作为非活跃会员对促销活动敏感度的反映,构建线性回归模型分析非活跃会员的激活率与促销活动之间的关系,结果表明,一定的促销活动有助于提升非活跃会员的激活率。
  连带消费是商场经营的核心,本文选取销售数量排名前十的商品作为最受欢迎的商品,根据会员消费明细表,利用Matlab软件构建商品关联表,并使用Clementine 建立商品的关联规则。商场可对热门商品及其关联商品推出相应促销活动,同时通过广告投放、邮件推送等方式对促销活动进行推广。

模型假设:

  为了使得问题更易于理解,我们作出以下合理假设:
  假设销售数据录入系统时不存在时间差;
  假设销售流水表和会员消费明细表中的一条记录代表一次消费,即不存在同一次消费产生多条记录的情况;
  假设会员的会员卡自开卡日起,除了自行退出外不存在会员卡过期导致会员退会的情况。

问题分析:

  对于问题一,我们运用数据统计分析的方法来对会员信息进行分析。问题中需要根据会员消费明细表分析会员的消费特征,主要从三个维度来分析:购买力、时间偏好、消费偏好,具体分析指标如下图所示:
在这里插入图片描述
  而对于会员与非会员群体之间的差异,我们从购买力以及购买数量的角度深入分析会员与非会员带给商场的价值差异,进而分析会员给商场带来的价值。

  对于问题二,需要建立一个能够刻画会员购买力的数学模型,并通过此模型来识别每一位会员的价值,就是要将每一位会员进行价值分析。在众多的用户价值分析模型中,RFM模型是衡量客户价值和增益能力的重要工具,考虑到本文研究对象为大型百货商场,相对消费会较为高端,可以增加一个反映会员一次性消费的最高能力的指标,故我们引入改进的RFM模型–RFMT 模型,对会员购买力进行刻画,并通过RFMT模型的会员得分对每个会员进行价值等级划分,最终可得知每一位会员对于商场的价值。

  商场会员从入会到退出的过程称为会员的生命周期,在整个生命周期内会员的状态会随着会员的消费行为改变而改变,这个动态的过程对于商场对会员的管理造成了困扰,因此我们需要建立一个模型以判别会员处于生命周期内的状态。对于问题三,基于问题二中的RFMT模型,选取R(会员最近一次购买商品的时间间隔天数)和F(会员在限定时间内购买商品的频率)指标作为聚类依据,应用K-means聚类法对有消费记录的会员进行状态聚类,最终可知每个会员所处的生命周期状态。

  问题四中要求计算非活跃会员的激活率和确定激活率和商场促销活动之间的关系模型。从问题三的聚类结果中可筛选出非活跃状态的会员,给非活跃会员构建分析指标:R、F、M、T指标,针对非活跃会员的RFMT指标进行因子分析,可得到相应指标的因子得分,以每个公因子的方差贡献率作为权重系数,对每个因子进行加权求和,从而计算得到各非活跃会员的激活率。对于非活跃会员激活率和商场促销活动之间的关系模型,考虑到商场促销活动与特价商品有关,结合非活跃会员的激活率和特价商品消费总金额在商品消费总金额中的占比,利用SAS软件做相关性分析,得到激活率和商场促销活动之间的关系模型。

  连带消费是商场经营的核心,例如经典的“尿布与啤酒”的故事。连带消费是商品与商品之间具有的某种特定的关系导致的,根据会员的消费情况,对购买的商品进行关联规则挖掘;同时筛选出会员消费记录中的购买数量前十的商品作为会员的喜爱商品,结合商品之间的关联规则,开展促销活动。

模型的建立与求解整体论文缩略图

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

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

clc,clear,format rata=xlsread('C:\Users\yang\Desktop\C 题\活跃状态矩阵.xlsx');[r,c]=size(a);a=a';a=a(:)'; %把矩阵a逐行展开成一个行向量
for i=1:2for j=1:2f(i,j)=length(findstr([i,j],a)); %统计子字符串'ij'的个数
endendni=sum(f,2); %计算矩阵f的行和
phat=f./repmat(ni,1,size(f,2)); %求状态转移的频率
format %恢复到短小数的显示格式
import fp_growth_py3 as fpgimport pandas as pdimport datetimeitemName='商品名称'start=datetime.datetime.now()data=pd.read_excel('C:/Users/yang/Desktop/C 题/fpgrowth 建模数
据.xlsx')dataSet,itemSet=[],[]itemSet.append(data[itemName][0])for i in range(1,len(data)):if data['会员消费编码'][i]==data['会员消费编码'][i-1]:itemSet.append(data[itemName][i])if i==len(data)-1:dataSet.append(itemSet)else:dataSet.append(itemSet)itemSet=[]itemSet.append(data[itemName][i])if i==len(data)-1:dataSet.append(itemSet)end=datetime.datetime.now()readDataTs=(end-start).secondsif __name__ == '__main__':start=datetime.datetime.now()'''
调用find_frequent_itemsets()生成频繁项
@:param minimum_support 表示设置的最小支持度,即若支持度大于等于
inimum_support,保存此频繁项,否则删除
@:param include_support 表 示 返 回 结 果 是 否 包 含 支 持 度 , 若
include_support=True,返回结果中包含 itemset 和 support,否则只返回
itemset'''frequent_itemsets=fpg.find_frequent_itemsets(dataSet,minimum_support=49, include_support=True)#print(type(frequent_itemsets)) # print typeresult,itemNum=[],[]for itemset, support in frequent_itemsets:listresult.append((itemset, support))itemNum.append(len(itemset))# 将generator 结果存
result = sorted(result, key=lambda i: i[0]) # 排序后输出
itemNum=pd.Series(itemNum)itemNumMax=itemNum.max()result2=[]for i in range(itemNumMax):#result2.append([])for itemset, support in result:result2[len(itemset)-1].append((itemset, support))result3=[]for i in range(1,itemNumMax):for j in range(len(result2[i])):for k in range(i+1):y=result2[i][j][0][k]x=''xx=[]n=0for item in result2[i][j][0]:if item!=y:xx.append(item)x+=item+','n+=1x=x[:-1]for t in range(len(result2[i-1])):if xx==result2[i-1][t][0]:confidence=result2[i][j][1]/result2[i-1][t][1]supportCountX=result2[i-1][t][1]supportCountY=result2[i][j][1]supportX=result2[i-1][t][1]/len(dataSet)supportY=result2[i][j][1]/len(dataSet)result3.append((x,y,n,supportCountX,supportCountY,supportX,supportY,confidence))breakresult3=pd.DataFrame(list(result3))result3.columns = ['X','Y','X 商品个数
','supportCountX','supportCountY','supportX','supportY','confidence']result3.to_excel('C:/Users/yang/Desktop/fpgrowthResult.xlsx')end=datetime.datetime.now()calTs=(end-start).seconds
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Kafka性质小结
  • FutureTask源码分析
  • 江科大笔记—STM32课程简介
  • 杭州电子科技大学《2020年+2021年861自动控制原理真题》 (完整版)
  • nginx基础篇(一)
  • docker-compose up 报错:KeyError: ‘ContainerConfig‘
  • python学习第十节:爬虫基于requests库的方法
  • 什么是区块链,以及应用场景
  • 钉钉与MySQL对接集成获取部门列表2.0打通EXECUTE语句
  • STM32——输入捕获
  • 工业一体机在汽车零部件工厂ESOP系统中的关键作用
  • mysql事务的隔离级别学习
  • 基于SpringBoot+Vue+MySQL的家乡特色推荐系统
  • 视觉SLAM ch5——相机与图像
  • C++:内部类,匿名对象,操作符new与delete
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Debian下无root权限使用Python访问Oracle
  • idea + plantuml 画流程图
  • If…else
  • Java反射-动态类加载和重新加载
  • java小心机(3)| 浅析finalize()
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Material Design
  • MySQL用户中的%到底包不包括localhost?
  • Python - 闭包Closure
  • Vue2.0 实现互斥
  • 飞驰在Mesos的涡轮引擎上
  • 关于 Cirru Editor 存储格式
  • 观察者模式实现非直接耦合
  • 简单易用的leetcode开发测试工具(npm)
  • 前端自动化解决方案
  • 一道面试题引发的“血案”
  • 正则表达式
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​补​充​经​纬​恒​润​一​面​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #每天一道面试题# 什么是MySQL的回表查询
  • (~_~)
  • (30)数组元素和与数字和的绝对差
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (LeetCode C++)盛最多水的容器
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (pycharm)安装python库函数Matplotlib步骤
  • (ros//EnvironmentVariables)ros环境变量
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (七)glDrawArry绘制
  • (一)插入排序
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转载)Linux 多线程条件变量同步
  • ***通过什么方式***网吧
  • .DFS.
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET 8.0 中有哪些新的变化?