现烤烘焙类产品商品组合选品探索
目的:对于现烤烘焙类产品进行门店各天的商品选品推荐,组合推荐
算法选择:序列挖掘算法 (关联规则Apriori)
模型思路及代码API:
模型思路类似GSP算法:
首先按照星期来划分数据集,周一至周日共7条线,或者按照工作日与非工作日来区分数据集属性。若使用一年的数据,那每个星期的数据源可以有365/7 =52条(考虑近期时间越准确的因素)。
对于现烤类产品,时间点的预测把商品组合把控度较严格,所以按照全天的售卖时间线来做各点可用商品组合选取。
基于Aprior算法上最改进及更符合实际应用需求,GSP算法是Aprior算法的一种,相较于Aprior算法可以有效减少需扫描的候选序列,减少无用模式的产生。原始Aprior算法是全遍历形式,耗时很高吃内存。Aprior算法简单的运行遍历图如下:
算法输入表分两部分,引入了销量和及销售频次两个指标来进行选品筛选。如下销售表,若销售数量>0则定义为有销售 1,否则为0。
商品组合的SKU数在算法中可理解为SKU序列个数为k时对应的support值情况,该序列产品集最易覆盖销售需求面。Support频次概率指标数是基于商品集最易覆盖销售面的考量;而salesum销售和指标;门店实际业务设立k值范围15-20sku数,仅打印算法该部分商品组合结果做后续时间线接替。
API 函数下面。
第一部分: 结果构建每个时间点下最易售卖及销量和较高的产品组合集:
第二部分:确定时间序列下的商品组合最优接替选项(采用全匹配):
确定接替选项选取指标值:p1(组合销量和) p2(组合销售频次) p3(组合间接替性)
假设时间点A的组合选项为A1:[a,b,c,d,e] A2:[a,b,d,f] A3:[c,d,e,f]
时间点B的组合选项为B1:[a,b,e,f] B2:[a,c,d,e,f,g] B3:[b,c,d]
时间点C……
即指标值表现为:
(p3为商品组合交集个数*2/组合并集总数 代表商品组合间的接替性)
各自进行标准化后加和作为综合指标值。
按综合指标值来确定最优时间线上的商品组合接替排序。还可以引入现烤产品的烤制时间,烤制批数等因素考虑。
思路总结:规则算法对于业务细节的抠点和关键点需要紧密斜街和设立相应规则指标来符合现实业务情况,业务跟进及理解并用于模型构建要求度高;规则的按规设立表现在算法运行层面上会导致更改复杂及运行时间复杂度高,很多规则需要全条件匹配思考。目前并没有对运行时间上进行优化,对于整理算法的主要是基于业务转化规则的构思,而对于传统机器理论并没有较多涉及。
git:https://github.com/lpvote/application_exploration.git
主要API:
def generate_new_combinations(old_combinations):items_types_in_previous_step = np.unique(old_combinations.flatten())for old_combination in old_combinations:max_combination = max(old_combination)for item in items_types_in_previous_step:if item > max_combination:res = tuple(old_combination) + (item,)yield resdef apriori_addsum(df, df_sum, min_support=0.5, use_colnames=False, min_len=1, max_len=None, n_jobs=1):'''#将销量指标引入进来#销量表:df_sum 有无销售表:df--用于计算关联规则范围 两张表索引一致#不使用销量和做排序选取,后续取单品成本利润 做利润和 排序选取 先实现算法support:销售频次概率 低于min_support 的单品id不需要ary_col_idx: 单品idsupport_salesum: 单品销量和 --后续替换利润和'''
# df_sum = A_weekhour_sum
# df = A_weekhour
# min_support=0.03
# use_colnames=True
# max_len=3
# n_jobs=1allowed_val = {0, 1, True, False}unique_val = np.unique(df.values.ravel()) #去除重复值for val in unique_val:if val not in allowed_val:s = ('The allowed values for a DataFrame'' are True, False, 0, 1. Found value %s' % (val))raise ValueError(s)is_sparse = hasattr(df, "to_coo")if is_sparse: #FalseX = df.to_coo().tocsc()support = np.array(np.sum(X, axis=0) / float(X.shape[0])).reshape(-1)else:X = df.valuessale_sum = df_sum.valuessupport = (np.sum(X, axis=0) / float(X.shape[0])) #support:每个单品的有销售天数/总天数 = 销售频次概率support_salesum = np.sum(sale_sum, axis=0) #每个单品的总销量ary_col_idx = np.arange(X.shape[1]) #单品idsupport_dict = {1: support[support >= min_support]} #support:销售频次概率itemset_dict = {1: ary_col_idx[support >= min_support].reshape(-1, 1)}salesum_dict = {1: support_salesum[support >= min_support]}max_itemset = 1rows_count = float(X.shape[0])if max_len is None:max_len = float('inf')while max_itemset and max_itemset < max_len: #从1 至max值 循环;每次循环+1next_max_itemset = max_itemset + 1combin = generate_new_combinations(itemset_dict[max_itemset]) #构建全单品id关联-索引结构frequent_items = []frequent_items_support = []frequent_items_salesum = []if is_sparse: #Falseall_ones = np.ones((X.shape[0], next_max_itemset))for c in combin: #exp:(27, 29, 32) 单品id关联if is_sparse: #Falsetogether = np.all(X[:, c] == all_ones, axis=1) together_sum = np.all(X[:, c] == all_ones, axis=1) else:together = X[:, c].all(axis=1) #exp:(27, 29, 32) 索引至X→df表值 ;判断是否全部为1即全部有销售返回Ture否则返回Ftogether_sum = sale_sum[:, c].sum(axis=1) support = together.sum() / rows_count #全部有销售的商品组合 频次概率值support_salesum = together_sum.sum() / rows_count #全部有销售的商品组合 销量总和日均if support >= min_support:frequent_items.append(c)frequent_items_support.append(support)frequent_items_salesum.append(support_salesum)if frequent_items: #结果构建为dict;k=1数值不合理 是不要的itemset_dict[next_max_itemset] = np.array(frequent_items)support_dict[next_max_itemset] = np.array(frequent_items_support)salesum_dict[next_max_itemset] = np.array(frequent_items_salesum)max_itemset = next_max_itemsetelse:max_itemset = 0#字典拆开填充表内all_res = []for k in sorted(itemset_dict):#单品的sku种类数为大于min_len个时关联规则可利用做打印 min_len=15if k >= min_len:support = pd.Series(support_dict[k])itemsets = pd.Series([frozenset(i) for i in itemset_dict[k]])salesumsets = pd.Series(salesum_dict[k])res = pd.concat((support, itemsets, salesumsets), axis=1)if res.shape[0] >= 5:res_sumsort = res.sort_values(by=[2],ascending=False).head() #按销量和排序取前5的商品组合res_countsort = res.sort_values(by=[0],ascending=False).head() #按销售频次排序取前5的商品组合else :res_sumsort = res.sort_values(by=[2],ascending=False)res_countsort = res.sort_values(by=[0],ascending=False)all_res.append(res_sumsort)all_res.append(res_countsort)#k>=15的关联规则列表,k筛选范围,组合过多了后续选择根本无法串联匹配res_df = pd.concat(all_res)res_df.columns = ['support', 'itemsets', 'salesumsets']res_df = res_df.drop_duplicates()if use_colnames: #Truemapping = {idx: item for idx, item in enumerate(df.columns)}# global atest,btest,ctest,dtest,etest# atest = mapping# btest = res_df# ctest = itemset_dict# dtest = support_dict# etest = all_resres_df['itemsets'] = res_df['itemsets'].apply(lambda x: [mapping[i] for i in x])res_df = res_df.reset_index(drop=True)return res_df
现烤烘焙类产品商品组合选品探索相关推荐
- Shopee跨境女装有哪些卖得好?虾皮女装类目选品思路
Shopee时尚类常年热销,其中女装类目向来是跨境优势类目,目前在服饰类目中日单量及销售额排名第一.国货女装凭借款式多样.物美价优等特点,深受东南亚及拉美消费者的青睐.那么女装类目在哪个市场的增长潜力 ...
- 选品的差异化如何把握?通过产品差异化形成怎样优势?
在我们选品的前期,必然会做市场调研.熟练的运营高手都知道,同类型产品间的微小差异,往往会成为占据市场份额的一步好棋. 差异化的选品意味着不同的目标人群,对目标人群的偏好把握得越精准,选品大卖的可能性就 ...
- 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付
第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 文章目录 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 一.分析背景与竞品选择 1.竞品分析目的 2.行业研究与市场趋势分析 ...
- 2020年阿里云年中大促【福利】【选品】全攻略
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 2020年阿里云年中大促活动于6月1日正式上线啦! 活动时间为:2020年6月1日至2020年6月 ...
- 闲鱼无货源怎样选品,能够做到日入几百?
闲鱼无货源卖货相信很多人已经了解过了.无货源卖货简单可以理解为自己没有货源,需要通过其他平台去选取热卖的商品到自己店铺卖,卖出后商家帮发货.简单一句话概括就是"一件代发". 那么他 ...
- 淘宝蓝海虚拟选品实操复盘,选对品可日入300-500
这篇文章分为这几个部分: 选品方向.选品词根.选品思维.选品方法.上架测试等. 如果你是做实物的,估计这篇文章不太适合: 但如果你是做虚拟产品的,那绝对适合你. 好了,废话不多说了,我们来看下今天这篇 ...
- 亚马逊选品技巧‘7’步走
主要包括: 1. 认识理想中的产品 2. 如何快速获取产品灵感 3. 如何找到合适的产品关键词 4. 产品市场前景和竞争力分析 5. 产品的市场有多大 6. 如何快速创造新品 7. 如何快速验证市场 ...
- 【亚马逊运营】如何提升选品效率的小技巧值得卖家们收藏?
对于大多数亚马逊卖家来说,选品一直以来都是个难题.选品好坏将直接关系着你的店铺销售和转化,这里船长BI将重点和大家说明一下. 影响选品的效率也是多方面的,主要体现在: a.没有数据源支持:看看这,看看 ...
- 弘辽科技:店铺选品的重要性
今天这一篇文章我们就来和大家聊聊作为运营最基础的能力--选品!平台可能会变,但人的需求是不会变的,而选品就是需求导向 一.因此选品的方法论就不言而喻了 1.通过生意参谋数据分析找到搜索量大的.卖家少的 ...
最新文章
- 云计算软件生态圈:摸到一把大牌
- 无连接的用户数据报协议UDP
- .NET Socket服务编程之-高效连接接入编
- 最接近原点的 k 个点_第K个最接近原点的位置
- thinking in java -- notes-2
- hadoop3.2.2--记录java.io.IOException: All specified directories have failed to load.问题
- python乘积函数_龙贝格求积公式(Python实现)
- BaseAnimation
- 网络中看不见的五大重要安全隐患
- TeaVM辛辛苦苦编译出的wasm,浏览器中不能跑
- ASP.NET 获取IP信息等探针
- JAVA爬虫系列教程
- (三)手眼标定结果的应用
- EXCEL中输入的数字无法正常显示变成科学计数法
- iOS 第三方库插件和知名博客
- 南京地铁行业发展策略与运营建设规模分析报告2022版
- 仿么么街货源客模板源码 蚂蚁分类信息系统 带安装教程
- 机器视觉之工业摄像机知识点(二)
- SpringBoot中@Value读取不到值的解决方案
- 2021年8月语言排行榜