市场篮子分析 - 数据建模

数据挖掘 阿帕奇火花 斯卡拉 市场篮子分析
2022-03-15 14:11:39

想象一下,我有以下数据集:

 Customer_ID    Product_Desc
    1   Jeans
    1   T-Shirt
    1   Food
    2   Jeans
    2   Food
    2   Nightdress
    2   T-Shirt
    2   Hat
    3   Jeans
    3   Food
    4   Food
    4   Water
    5   Water
    5   Food
    5   Beer

我需要做出消费者行为并预测与之相关的产品。为此,我认为一个好的策略是先建立关系,然后计算发生次数(不知道是否有人有更好的主意)。

第一步是总结这种关系:

Jeans-T-Shirt-Food
Jeans-Food-Nightdress-T-Shirt-Hat
Jeans-Food
Food-Water
Water-Food-Beer

怎么能做到这一点?使用 Apache PIG 还是使用 Spark?

非常感谢!!!

2个回答

让我们从您的问题定义开始:“一个好的策略首先建立关系,然后计算出现次数”。

粗略地说,就是购物篮分析算法使用的基本策略。然而,像Apriori或 FPGrowth 这样的算法专门设计用于分析此类数据集(大规模)并推断所有篮子中项目之间的固有关联规则。我的建议是使用其中一种来收集所购买物品之间的关系,而不是重新发明它们;特别是因为您将面临这些算法已经解决的许多难题(即生成篮子项目组合时的大搜索空间)。

您可以使用多种库或语言中的任何一种来执行此操作,即 R、Python 等。使用 MLLib 在 Spark 中执行此操作非常简单,您的工作流程类似于:1)选择一种算法,例如 FPGrowth;2)准备您的数据以适应 FPGrowth 要求的格式(每笔交易应该是一个篮子项目的数组);3)运行FPGrowth并输出其频繁项集。

Spark 的网站上有一个很好的例子

import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD

val data = sc.textFile("data/mllib/sample_fpgrowth.txt")

//prepare the data to use with FPGrowth
val transactions: RDD[Array[String]] = data.map(s => s.trim.split(' '))

//create and run the model
val fpg = new FPGrowth()
  .setMinSupport(0.2)
  .setNumPartitions(10)
val model = fpg.run(transactions)

//output the frequent itemsets (items frequently bought together)
model.freqItemsets.collect().foreach { itemset =>
  println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}

你可以在 Spark 中使用 groupByKey 或 combineByKey