销量预测和用户行为的分析--基于ERP的交易数据

写在前面:

这段时间一直都在看一些机器学习方面的内容,其中又花了不少时间在推荐系统这块,然后自己做了一套简单的推荐系统,但是跑下来的结果总觉得有些差强人意,我在离线实验中得到Precision,Recall一般都只有15%左右,比起通常的机器学习算法动不动就90%以上的指标,这个我觉得显然是太低了,我觉得可能有如下理由导致的:

  1. 数据不完整,目前能拿到的数据也就是ERP里面的交易数据和各种主数据,但是在我看来,交易数据的权重在各种其他类型的数据中应该是最重要的,至少也是排在前列的,可能也是我的一厢情愿。
  2. 业务领域没有考虑周全,少了某些重要的参数未加入到模型中去,我想这个才是最重要的,数据分析的前提就是对业务有很深的领悟,才能做出较好的结果
  3. 技能欠缺

再说下本人公司背景,公司的业务是B2B类型,公司有接近10万个产品的量,用户比物品少,1万左右,其中还有大量的不活跃用户。后来经过多方面思考后,打算先暂停推荐系统,换一种思路,咱不推荐了,推荐关注在给用户推荐之前未曾购买过的产品,但是就我们行业来说,我会主观的认为一般B2B的业务,客户也即公司,他们的兴趣爱好是基本固定的,不会像人一样这么的善变,所以从这个角度来思考的话,推荐系统也许就不是那么特别的重要的(我知道此刻肯定有N个人要反驳我了)

因为我认为交易数据的重要性,所以我就仅仅从交易数据入手,来分析出用户的购买行为,或者某个物品的被购买行为。所以才有了这次项目的展开:

目的:

通过本项目,希望能在以下方面提供给销售,市场部门以及管理团队决策的参考:

  1. 预估某个用户的未来会需要购买的物品,可以进而预测该用户的销量
  2. 发现某个用户可能存在的交易流失行为,发现潜在风险
  3. 预测某个物品未来可能会被那些用户购买
  4. 预测某个物品未来可能会流失那些用户,发现潜在风险
  5. 提供解释理由为什么可以预测

通过以上的结果,可以提前有针对性的对客户或者物品进行各种活动。

概念须知


概念


解释


数据


SAP中的订单交易数据,客户主数据,物料主数据


训练数据(TrainData)


用来将整个数据划分一部分来作为算法的训练集


测试数据(TestData)


用来将整个数据划分另外一部分作为测试数据,通过测试数据来测试算法的各项性能指标


预测结果


在训练数据集上预测出来的结果集合


关键评价指标


推荐结果


在训练数据上找到的所有推荐结果数


命中条目(hit)


预测结果中的集合恰好在测试集合中的数目


准确率/查准率(precision)


命中条目占预测结果中的比率,可以理解为真的预测正确的结果占所有预测结果有多少


召回率/查全率(recall)


命中条目占测试结果中的比例,可以理解为所有全部为正确的结果到底有多少真的被预测正确了


潜在风险数(这个以及下面的两个是我自己瞎造的概念)


在训练中,可能存在有风险的数据(用户-物品为一条数据),这些数据往往需要用户去找原因,确定是否真的存在风险


误差预估数


潜在风险数中的数据在测试数据中已经发生了交易,所以认为是估计有误差,这个数从商业上讲应该要越大越好,因为他们最终都还是有交易行为了


误差风险率


误差预估数/潜在风险数

基于用户的分析的报告

使用客户XXXX有限公司作为测试:
  1. 选择时间区间:20150101-201601231,该用户的所有买过的物品的交易数据作为训练数据
  2. 选择时间区间:20170101-20170519,该用户的所有买过的物品的交易数据作为测试数据
  3. 各项指标如下:

指标


结果值


说明


训练数据集(不同物料编号数目)


2425


该用户在这段时间内共买过2425个不同编号的物品


推荐结果


458


在训练数据上算出来的可以给该用户推荐的物品数目


测试数据集


839


该用户在测试集这段时间内购买了839个不同编号的物品


命中结果


220


代表算法预测成功了220个物品该用户会去购买的


准确率


48%


召回率


26%


潜在风险数


313


该用户可能会消失的交易数码,例如用户不再买某一个产品了,需要业务来判断是否真的有风险


误差预估数


189


说明在潜在风险中313个里面,其中有189个是没有风险的


误差风险率


60%


189/313,这个值越高越说明风险越小

对于算法来说,使用不同的参数会产生不同的结果,本次实验采用的参数是比较乐观的估计,这会导致算出来的潜在风险数较小,命中数目较高,准率较低。但具体怎么调节参数,需要结合具体业务场景。

基于物品的分析

使用物品YYYYY:
  1. 选择时间区间:20150101-201601231,该用户的所有买过的物品的交易数据作为训练数据
  2. 选择时间区间:20170101-20170519,该用户的所有买过的物品的交易数据作为测试数据
  3. 各项指标如下:

指标


结果值


说明


训练数据集(不同用户编号数目)


122


解释同基于用户分析相似


推荐结果


28


测试数据集


80


命中结果


24


准确率


86%


召回率


30%


潜在风险数


73


误差预估数


45


误差风险率


62%

结果说明:

至少从各项KPI指标来看,都是要明显高于推荐系统中的指标的,特别是基于物品的分析准确率高达86%,当时看到这个数的时候第一反应就是到底哪里出错了?经过各种代码的Review发现是没问题的,其实也验证了我的前面的说法,企业客户的兴趣爱好不会随便发生变化的。

补充说明

  1. 考虑到机器性能,还不能在单机上跑所有的用户和所有的物品的分析结果,目前以本实验的用户和物品一起分析所占用的时间为20秒。如果10万条物品记录来跑的话,可想而知会需要话多长的时间
  2. 本项目是采用Python来开发的
  3. 此预测系统其实可以和推荐系统进行一个很好的结合,来发挥出更大的功效,提高分析的智能性,例如可以检查流失的交易是否是转移到了类似商品上去,等

最后:

这是目前的第二篇博客,还是对于怎么编辑博客的样式一无所知,最后只能跑到Word文档里面来写,然后贴在博客上了,写博客真是一件很辛苦的事情,写了好久了,,喜欢就点个赞吧. 如果你对具体模型有兴趣,我就接着继续写技术上是怎么实现的.

时间: 2024-10-11 16:40:07

销量预测和用户行为的分析--基于ERP的交易数据的相关文章

用户画像 销量预测 微观 宏观 bi

w 目前我们没有自己的平台 第三方平台又不会给任何我们想要的数据   没有用户的注册信息 全天候的行为信息   用户画像没法做    针对我们业务的bi做的思路是什么呢   数据中心怎么做销量预测呢  没有购买者个体的微观的行为历史记录预测 怎么做总体的宏观的销量预测呢?  实体的商超像 沃尔玛 家乐福 华润万家 他们是怎么玩的呢

Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法

Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法 1.spreadOutApp尽量平均分配到每个executor上: 2.非spreadOutApp尽量在使用单个executor的资源. 源码分析 org.apache.spark.deploy.master.Master 1.首先判断,master状态不是ALIVE的话,直接返回2.调度driver3. Application的调度机制(核心之核心,重中之重) 源码如下: 1 /*

AtomicInteger源码分析——基于CAS的乐观锁实现

AtomicInteger源码分析--基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换.切换涉及到清空寄存器,缓存数据.然后重新加载新的thread所需数据.当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来.在某个资源不可用的时候,就将cpu让出,把当前等待线程切换为阻

201310-安卓收集用户信息样本分析-willj[4st TeAm]

报告更新日期: 2013-10-14 样本发现日期: 2013-01-22 样本类型: Android 样本文件大小/被感染文件变化长度: 1.15 MB (1,209,713 字节) 样本文件MD5 校验值: 001769fd059d829a568b4196f07c6df9 壳信息:无 可能受到威胁的系统: Android OS 已知检测名称: Win32.Backdoor.Ginmaster.x 作者:willJ 简介 该样本为伪装成Android游戏盗取用户信息,病毒推广APP的木马. 详

互联网金融平台用户产品偏好分析实例

目的:分析用户产品偏好支持产品区域化精准推送 所需数据:用户基本信息(区域.购买行为明细),所购产品利率(利率.次数).担保机构(担保机构名称.次数).产品期限(不同期限对应次数) 一.分析思路 1.分利率:统计每个用户投资不同利率产品的次数,依此计算用户对不同产品的选择比例(若利率选择较多,可分区间统计,例如4%-6%,6%-8%等) 2.分期限:计算思路类似于1 3.分担保机构:同理 二.分析过程 1.分利率 计算单用户利率占比 计算不同地区用户对对应利率的占比均值,若相加不等于100%需要

unix & linux oralce用户 内存使用分析

Linux********************************************************************************************************************************************************* --节点一11点半分析: [[email protected] /home/oracle]$ top -b -n 1 |grep oracle|awk '{print $6}'| a

Spring IoC 源码分析 (基于注解) 之 包扫描

在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫描的过滤规则.那我们今天就来看下包扫描的具体过程. 还是先看下面的代码: AnnotationConfigApplicationContext类 //该构造函数会自动扫描以给定的包及其子包下的所有类,并自动识别所有的Spring Bean,将其注册到容器中 public AnnotationConf

使用Azure Functions 在web 应用中启用自动更新(一)分析基于轮询的 Web 应用的限制

1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vistual Studio 在 Azure 上的部署 ”Azure Functions“应用. 接着上一篇,本篇介绍在 “Azure Functions” 中实现一个函数,该函数仅在 Azure Cosmos DB 中的数据发生变化时运行. 在基于计时器的轮询原型中,无论底层数据是否发生了更改,客户端应用程序都会联

基于MATLAB的多项式数据拟合方法研究-毕业论文

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M