Upload
geekslab
View
82
Download
1
Embed Size (px)
Citation preview
АссоциативныеАссоциативные правилаправиладлядля геренациигеренации
рекомендацийрекомендаций длядля решенийрешений ввсфересфере eCommerce eCommerce нана базебазе
технологийтехнологий Big Data Big DataБыковский Александр
Senior Java DeveloperGrid Dynamics, Харьков
skype: alexandr_bikovskiyemail: [email protected]
ЧтоЧто нана повесткеповестке днядня??
Что такое ассоциативные правилав общемПопулярность ассоциативныхправилМайнинг ассоциативных правилПримерыВопросы
АссоциативныеАссоциативные правилаправила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"
kiji-modeling kiji-scoring
базируется наследующих технологиях
org.kiji.modeling.lib.RecommendationPipeval 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 ExamplesSpark Examples
val transactions = sc.textFile("../data/mllib/sample_fpgrowth.txt").map(_.split(" ")).cache()println(s"Number of transactions: ${transactions.count()}")>> Number of transactions: 6import org.apache.spark.mllib.fpm.FPGrowthval model = new FPGrowth().setMinSupport(0.8).setNumPartitions(2).run(transactions)println(s"Number of frequent itemsets: ${model.freqItemsets.count()}")>> Number of frequent itemsets: 1model.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 pz y x w v u t ss x o n rx z y m t s q ezx z y r q t p
"../data/mllib/sample_fpgrowth.txt"
ВопросыВопросы