销量预测和用户行为的分析--基于ERP的交易数据
写在前面:
这段时间一直都在看一些机器学习方面的内容,其中又花了不少时间在推荐系统这块,然后自己做了一套简单的推荐系统,但是跑下来的结果总觉得有些差强人意,我在离线实验中得到Precision,Recall一般都只有15%左右,比起通常的机器学习算法动不动就90%以上的指标,这个我觉得显然是太低了,我觉得可能有如下理由导致的:
- 数据不完整,目前能拿到的数据也就是ERP里面的交易数据和各种主数据,但是在我看来,交易数据的权重在各种其他类型的数据中应该是最重要的,至少也是排在前列的,可能也是我的一厢情愿。
- 业务领域没有考虑周全,少了某些重要的参数未加入到模型中去,我想这个才是最重要的,数据分析的前提就是对业务有很深的领悟,才能做出较好的结果
- 技能欠缺
再说下本人公司背景,公司的业务是B2B类型,公司有接近10万个产品的量,用户比物品少,1万左右,其中还有大量的不活跃用户。后来经过多方面思考后,打算先暂停推荐系统,换一种思路,咱不推荐了,推荐关注在给用户推荐之前未曾购买过的产品,但是就我们行业来说,我会主观的认为一般B2B的业务,客户也即公司,他们的兴趣爱好是基本固定的,不会像人一样这么的善变,所以从这个角度来思考的话,推荐系统也许就不是那么特别的重要的(我知道此刻肯定有N个人要反驳我了)
因为我认为交易数据的重要性,所以我就仅仅从交易数据入手,来分析出用户的购买行为,或者某个物品的被购买行为。所以才有了这次项目的展开:
目的:
通过本项目,希望能在以下方面提供给销售,市场部门以及管理团队决策的参考:
- 预估某个用户的未来会需要购买的物品,可以进而预测该用户的销量
- 发现某个用户可能存在的交易流失行为,发现潜在风险
- 预测某个物品未来可能会被那些用户购买
- 预测某个物品未来可能会流失那些用户,发现潜在风险
- 提供解释理由为什么可以预测
通过以上的结果,可以提前有针对性的对客户或者物品进行各种活动。
概念须知
|
概念 |
解释 |
|
|
数据 |
SAP中的订单交易数据,客户主数据,物料主数据 |
|
|
训练数据(TrainData) |
用来将整个数据划分一部分来作为算法的训练集 |
|
|
测试数据(TestData) |
用来将整个数据划分另外一部分作为测试数据,通过测试数据来测试算法的各项性能指标 |
|
|
预测结果 |
在训练数据集上预测出来的结果集合 |
|
|
关键评价指标 |
推荐结果 |
在训练数据上找到的所有推荐结果数 |
|
命中条目(hit) |
预测结果中的集合恰好在测试集合中的数目 |
|
|
准确率/查准率(precision) |
命中条目占预测结果中的比率,可以理解为真的预测正确的结果占所有预测结果有多少 |
|
|
召回率/查全率(recall) |
命中条目占测试结果中的比例,可以理解为所有全部为正确的结果到底有多少真的被预测正确了 |
|
|
潜在风险数(这个以及下面的两个是我自己瞎造的概念) |
在训练中,可能存在有风险的数据(用户-物品为一条数据),这些数据往往需要用户去找原因,确定是否真的存在风险 |
|
|
误差预估数 |
潜在风险数中的数据在测试数据中已经发生了交易,所以认为是估计有误差,这个数从商业上讲应该要越大越好,因为他们最终都还是有交易行为了 |
|
|
误差风险率 |
误差预估数/潜在风险数 |
基于用户的分析的报告
使用客户XXXX有限公司作为测试:
- 选择时间区间:20150101-201601231,该用户的所有买过的物品的交易数据作为训练数据
- 选择时间区间:20170101-20170519,该用户的所有买过的物品的交易数据作为测试数据
- 各项指标如下:
|
指标 |
结果值 |
说明 |
|
训练数据集(不同物料编号数目) |
2425 |
该用户在这段时间内共买过2425个不同编号的物品 |
|
推荐结果 |
458 |
在训练数据上算出来的可以给该用户推荐的物品数目 |
|
测试数据集 |
839 |
该用户在测试集这段时间内购买了839个不同编号的物品 |
|
命中结果 |
220 |
代表算法预测成功了220个物品该用户会去购买的 |
|
准确率 |
48% |
|
|
召回率 |
26% |
|
|
潜在风险数 |
313 |
该用户可能会消失的交易数码,例如用户不再买某一个产品了,需要业务来判断是否真的有风险 |
|
误差预估数 |
189 |
说明在潜在风险中313个里面,其中有189个是没有风险的 |
|
误差风险率 |
60% |
189/313,这个值越高越说明风险越小 |
对于算法来说,使用不同的参数会产生不同的结果,本次实验采用的参数是比较乐观的估计,这会导致算出来的潜在风险数较小,命中数目较高,准率较低。但具体怎么调节参数,需要结合具体业务场景。
基于物品的分析
使用物品YYYYY:
- 选择时间区间:20150101-201601231,该用户的所有买过的物品的交易数据作为训练数据
- 选择时间区间:20170101-20170519,该用户的所有买过的物品的交易数据作为测试数据
- 各项指标如下:
|
指标 |
结果值 |
说明 |
|
训练数据集(不同用户编号数目) |
122 |
解释同基于用户分析相似 |
|
推荐结果 |
28 |
|
|
测试数据集 |
80 |
|
|
命中结果 |
24 |
|
|
准确率 |
86% |
|
|
召回率 |
30% |
|
|
潜在风险数 |
73 |
|
|
误差预估数 |
45 |
|
|
误差风险率 |
62% |
结果说明:
至少从各项KPI指标来看,都是要明显高于推荐系统中的指标的,特别是基于物品的分析准确率高达86%,当时看到这个数的时候第一反应就是到底哪里出错了?经过各种代码的Review发现是没问题的,其实也验证了我的前面的说法,企业客户的兴趣爱好不会随便发生变化的。
补充说明
- 考虑到机器性能,还不能在单机上跑所有的用户和所有的物品的分析结果,目前以本实验的用户和物品一起分析所占用的时间为20秒。如果10万条物品记录来跑的话,可想而知会需要话多长的时间
- 本项目是采用Python来开发的
- 此预测系统其实可以和推荐系统进行一个很好的结合,来发挥出更大的功效,提高分析的智能性,例如可以检查流失的交易是否是转移到了类似商品上去,等
最后:
这是目前的第二篇博客,还是对于怎么编辑博客的样式一无所知,最后只能跑到Word文档里面来写,然后贴在博客上了,写博客真是一件很辛苦的事情. 如果你对具体模型有兴趣,我就接着继续写技术上是怎么实现的.
销量预测和用户行为的分析--基于ERP的交易数据的更多相关文章
- Python爬虫+可视化教学:爬取分析宠物猫咪交易数据
前言 各位,七夕快到了,想好要送什么礼物了吗? 昨天有朋友私信我,问我能用Python分析下网上小猫咪的数据,是想要送一只给女朋友,当做礼物. Python从零基础入门到实战系统教程.源码.视频 网上 ...
- 用户画像 销量预测 微观 宏观 bi
w 目前我们没有自己的平台 第三方平台又不会给任何我们想要的数据 没有用户的注册信息 全天候的行为信息 用户画像没法做 针对我们业务的bi做的思路是什么呢 数据中心怎么做销量预测呢 ...
- Kaggle 商品销量预测季军方案出炉,应对时间序列问题有何妙招
https://www.leiphone.com/news/201803/fPnpTdrkvUHf7uAj.html 雷锋网 AI 研习社消息,Kaggle 上 Corporación Favorit ...
- 基于TILE-GX实现快速数据包处理框架-netlib实现分析【转】
最近在研究suricata源码,在匹配模式的时候,有tilegx mpipe mode,转载下文,了解一下. 原文地址:http://blog.csdn.net/lhl_blog/article/de ...
- 最新 x86_64 系统调用入口分析 (基于 5.7.0)
最新 x86_64 系统调用入口分析 (基于5.7.0) 整体概览 最近的工作涉及系统调用入口,但网上的一些分析都比较老了,这里把自己的分析过程记录一下,仅供参考. x86_64位系统调用使用 SYS ...
- AtomicInteger源码分析——基于CAS的乐观锁实现
AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...
- Python之路,Day22 - 网站用户访问质量分析监测分析项目开发
Python之路,Day22 - 网站用户访问质量分析监测分析项目开发 做此项目前请先阅读 http://3060674.blog.51cto.com/3050674/1439129 项目实战之 ...
- Oracle 12c中新建pdb用户登录问题分析
Oracle 12c新建用户登录问题分析1 用sys用户新建用户,提示公用用户名或角色名无效.原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##.默认登录连接的就 ...
- Spark项目之电商用户行为分析大数据平台之(六)用户访问session分析模块介绍
一.对用户访问session进行分析 1.可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄.职业.城市): 2.对这些用户在指定日期范围内发起的session,进行聚合统计,比如,统计出 ...
随机推荐
- Object-C开发常用宏定义
Object-C开发中宏会将经常用到的系统常量进行封装,方便使用: 1.获取通知中心 #define EYNotificationCenter(name, object, userInfo) [[NS ...
- 20155304 2016-2017-2 《Java程序设计》第六周学习总结
20155304 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 串流设计的概念 无论来源和目的地实体形式是什么,只要取得InputStream和Ou ...
- 老李分享:adb发送的指令都有哪些
老李分享:adb发送的指令都有哪些 这两天在poptest上课的时候,我们邀请了业内技术牛人为我们的学员讲解手机自动化方面的知识,每天大家都很踊跃,要学习到晚上11点多才能,有的学员跟我说都累傻了 ...
- 老李推荐:第1章3节《MonkeyRunner源码剖析》概述:架构
老李推荐:第1章3节<MonkeyRunner源码剖析>概述:架构 原理架构 MonkeyRunner使用起来非常的简单,只需要导入以下几个类基本上就能满足测试脚本编写的需求,比如: ...
- 老李分享:Android性能优化之内存泄漏2
这种创建Handler的方式会造成内存泄漏,由于mHandler是Handler的非静态匿名内部类的实例,所以它持有外部类Activity的引用,我们知道消息队列是在一个Looper线程中不断轮询处理 ...
- Excel import
Case Study: Reading cell content from excel template for COM variant type VT_R4 or VT_R8 is always l ...
- Spark源码分析之分区器的作用
最近因为手抖,在Spark中给自己挖了一个数据倾斜的坑.为了解决这个问题,顺便研究了下Spark分区器的原理,趁着周末加班总结一下~ 先说说数据倾斜 数据倾斜是指Spark中的RDD在计算的时候,每个 ...
- Java Script 字符串操作
JS中常用几种字符串操作: big() small() bold() fontcolor() fontsize() italics() strike() link() charAt() charCod ...
- 简单c语言子集词法分析器
概述 词法分析是编译的第一个环节,其输入是高级语言程序,输出是单词串.词法分析器的主要任务是将高级语言程序作为字符串输入,然后依据词法规则将字符串组合成单词,并输出单词串. 为了方便之后的编译环节,通 ...
- 【Tomcat源码学习】-4.连接管理
前面几节主要针对于Tomcat容器以及内容加载进行了讲解,本节主要针对于连接器-Connector进行细化,作为连接器主要的目的是监听外围网络访问请求,而连接器在启动相关监听进程后,是通过NIO方式进 ...