Ассоциативные правила для геренации
рекомендаций для решений в сфере eCommerce на базе технологий Big Data
Быковский Александр
Senior Java Developer
Grid Dynamics, Харьков
skype: alexandr_bikovskiy
email: control.eight@gmail.com
Что на повестке дня?
- Что такое ассоциативные правила в общем
- Популярность ассоциативных правил
- Майнинг ассоциативных правил
- Примеры
- Вопросы
Ассоциативные правила
X ⇒ Y
где X и Y являются наборами
Подгузники ⇒ Пиво

Нутелла + Хлеб


Примеры использования


Заявил об использовании ассоциативных правил в статье:

+


Заказчиками решения являются:




Популярность

12,541 результатов по запросу: "association rules"
9,464 результатов по запросу: "collaborative filtering"



Самая распространенная стратегия майнинга ассоциативных правил:


Анализ рыночной корзины




Мин. поддержка = 2

Мин. достоверность = 1.0 (100%)
{рубашка} ⇒ {брюки}
{брюки} ⇒ {рубашка}
Ассоциативные правила
Общее кол-во транзакций = 100,000
Лифт({рубашка, пальто}) = 25
Лифт({рубашка, салфетки}) = 1.5
Минимум = 1.0 но лучше = 2.0

Формальное описание




Анализ сложности

Кол-во транзакций = n
Размер наборов = k
Сочетания:
k <= 3



Тразакция (4) = {пальто, рубашка, брюки, шляпа}, n = 4



= 4
= 6
= 4
14 наборов
Тразакция (10) = 65,
Тразакция (100) = 5150
В сумме может достигать 5,000,000,000 наборов
Transaction (10) = {пальто, рубашка, брюки, футболка, ....}



= 10
= 45
= 10
Алгоритмы
Apriori, Eclact (Equivalence CLAss Transformation) - классические алгоритмы
FP-growth - позволяет значительно экономить память, быстрее аналогов
Dist-Eclact, ParEclact, PFP (Parallel FP-growth) - аналоги, разработанные для параллельных вычислений, подходящий для BigData. PFP используется в Spark MLlib
Top-K (Non Redundant) Association Rules - подходящий для BigData. Используется в решении от Predictiveworks, реазизованного на Spark (spark-arules)

Примеры использования


Вначале пару слов о

class WordCountJob(args: Args) extends Job(args) {
TypedPipe.from(TextLine(args("input")))
.flatMap { line => tokenize(line) }
.groupBy { word => word } // use each word for a key
.size // in each group, get the size
.write(TypedTsv[(String, Long)](args("output")))
// Split a piece of text into individual words.
def tokenize(text : String) : Array[String] = {
// Lowercase each word and remove punctuation.
text.toLowerCase.replaceAll("[^a-zA-Z0-9\\s]", "").split("\\s+")
}
}Пример кода для решения классической задачи "Word count"




базируется на следующих технологиях
org.kiji.modeling.lib.RecommendationPipe
val itemSetsPipe: Pipe = {
transactions
.prepareItemSets[Long](
'products -> 'itemset,
minSetSize=1,
maxSetSize=3,
separator=","
).support(
'itemset -> ('frequency, 'support),
totalsPipe,
None,
'norm
).confidenceAndLift(
('itemset, 'support) -> ('lhs, 'rhs, 'confidence, 'lift),
lhsMinSize = 1,
lhsMaxSize = 1,
rhsMinSize = 1,
rhsMaxSize = 2
)
}
itemSetsPipe.write(Tsv(
p=path,
fields=('lhs, 'rhs, 'count, 'support, 'confidence, 'lift),
writeHeader=true
))Hbase structure. Multiple columns

SerializedRecord {
count,
support,
confidence,
lift
}
Hbase structure. Single column
SerializedRecord {
list<SerializedRecord1>
}
SerializedRecord1 {
rhs,
count,
support,
confidence,
lift
}Spark Examples
val transactions = sc.textFile("../data/mllib/sample_fpgrowth.txt").map(_.split(" ")).cache()
println(s"Number of transactions: ${transactions.count()}")
>> Number of transactions: 6
import org.apache.spark.mllib.fpm.FPGrowth
val model = new FPGrowth().setMinSupport(0.8).setNumPartitions(2).run(transactions)
println(s"Number of frequent itemsets: ${model.freqItemsets.count()}")
>> Number of frequent itemsets: 1
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}
>> [z], 5
val model = new FPGrowth().setMinSupport(0.5).setNumPartitions(2).run(transactions)
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}
>> [t], 3
>> [t,x], 3
>> [t,x,z], 3
...r z h k p
z y x w v u t s
s x o n r
x z y m t s q e
z
x z y r q t p"../data/mllib/sample_fpgrowth.txt"
Вопросы
Ассоциативные правила для геренации рекомендаций для решений в сфере eCommerce на базе технологий Big Data
By Alexander Bykovsky
Ассоциативные правила для геренации рекомендаций для решений в сфере eCommerce на базе технологий Big Data
- 222