मुख्य सामग्री पर जाएँ

R का उपयोग करके मार्केट बास्केट विश्लेषण

मार्केट बास्केट विश्लेषण और उसके पीछे काम करने वाले APRIORI एल्गोरिद्म के बारे में जानें। देखिए यह कैसे रिटेलर्स को यह भविष्यवाणी करके कारोबार बढ़ाने में मदद कर रहा है कि ग्राहक कौन-से आइटम साथ में खरीदते हैं।
· 15 मि॰ पढ़ें

AI के साथ खोजें

आप एक डेटा वैज्ञानिक हैं (या बनने की राह पर हैं!) और आपको एक क्लाइंट मिलता है जो एक रिटेल स्टोर चलाता है। आपका क्लाइंट आपको सभी लेनदेन का डेटा देता है, जिसमें एक निश्चित अवधि में कई ग्राहकों द्वारा स्टोर से खरीदी गई वस्तुएं शामिल हैं, और आपसे कहता है कि उस डेटा का उपयोग करके उनके व्यवसाय को बढ़ाने में मदद करें। आपका क्लाइंट आपकी खोजों का उपयोग न केवल इन्वेंटरी में वस्तुओं को बदलने/अपडेट/जोड़ने के लिए करेगा बल्कि भौतिक स्टोर या ऑनलाइन स्टोर के लेआउट को बदलने के लिए भी करेगा। ऐसे परिणाम खोजने के लिए जो आपके क्लाइंट की मदद करेंगे, आप मार्केट बास्केट एनालिसिस (MBA) का उपयोग करेंगे, जो दिए गए ट्रांजैक्शन डेटा पर एसोसिएशन रूल माइनिंग लागू करता है।

इस ट्यूटोरियल में आप सीखेंगे:

  • एसोसिएशन रूल माइनिंग क्या है और उसके अनुप्रयोग
  • APRIORI एल्गोरिद्म क्या है?
  • R और विज़ुअलाइज़ेशन के साथ MBA/एसोसिएशन रूल माइनिंग कैसे लागू करें

Association Rule Mining

एसोसिएशन रूल माइनिंग तब उपयोग की जाती है जब आप किसी सेट में अलग-अलग वस्तुओं के बीच संबंध खोजना चाहते हैं, किसी ट्रांजैक्शन डेटाबेस, रिलेशनल डेटाबेस या किसी अन्य सूचना रिपॉज़िटरी में बार-बार आने वाले पैटर्न ढूंढना चाहते हैं। एसोसिएशन रूल माइनिंग के अनुप्रयोग मार्केटिंग, रिटेलिंग में बास्केट डेटा एनालिसिस (या मार्केट बास्केट एनालिसिस), क्लस्टरिंग और क्लासिफिकेशन में पाए जाते हैं। यह एसोसिएशन रूल्स नामक नियमों का सेट बनाकर आपको बता सकता है कि ग्राहक कौन-सी वस्तुएं अक्सर साथ में खरीदते हैं। सरल शब्दों में, यह आपको यदि यह तो वह के रूप में नियमों का आउटपुट देता है। क्लाइंट इन नियमों का उपयोग कई मार्केटिंग रणनीतियों के लिए कर सकते हैं:

  • ट्रेंड्स के अनुसार स्टोर लेआउट में बदलाव
  • ग्राहक व्यवहार विश्लेषण
  • कैटलॉग डिज़ाइन
  • ऑनलाइन स्टोर्स पर क्रॉस मार्केटिंग
  • ग्राहकों द्वारा खरीदी जाने वाली ट्रेंडिंग वस्तुएं क्या हैं
  • ऐड-ऑन बिक्री के साथ निजीकरण ईमेल्स

निम्नलिखित उदाहरण पर विचार करें:

example

एक ट्रांजैक्शन डेटा सेट दिया गया है। आप 1 से 5 तक क्रमांकित लेनदेन देख सकते हैं। प्रत्येक लेनदेन उस लेनदेन में खरीदी गई वस्तुएं दिखाता है। आप देख सकते हैं कि तीन लेनदेन में डायपर बीयर के साथ खरीदा गया है। इसी तरह, तीन लेनदेन में ब्रेड दूध के साथ खरीदी गई है, जिससे वे दोनों फ्रिक्वेंट आइटम सेट बनते हैं। एसोसिएशन रूल्स निम्नलिखित रूप में दिए जाते हैं:

$A=>B[Support,Confidence]$

$=>$ से पहले का भाग if (Antecedent) कहलाता है और $=>$ के बाद का भाग then (Consequent) कहलाता है।

जहाँ A और B ट्रांजैक्शन डेटा में वस्तुओं के सेट हैं। A और B असहभाजी (disjoint) सेट हैं।

$Computer=>Anti-virus Software[Support=20\%,confidence=60\%]$

ऊपर दिए गए नियम का अर्थ है:

  1. 20% लेनदेन दिखाते हैं कि कंप्यूटर खरीदने के साथ एंटी-वायरस सॉफ्टवेयर भी खरीदा जाता है
  2. एंटी-वायरस सॉफ्टवेयर खरीदने वाले 60% ग्राहकों ने कंप्यूटर भी खरीदा

अगले भाग में आप एसोसिएशन रूल माइनिंग की बुनियादी अवधारणाओं के बारे में जानेंगे:

Basic Concepts of Association Rule Mining

Basic Concepts of Association Rule Mining
  1. Itemset: एक या अधिक वस्तुओं का संग्रह। K-item-set का मतलब k वस्तुओं का सेट।

  2. Support Count: किसी आइटम-सेट के आने की आवृत्ति

  3. Support (s): उन लेनदेन का अंश जिनमें आइटम-सेट 'X' शामिल है

    $Support(X)=\frac{frequency(X)}{N}$

नियम A=>B के लिए, सपोर्ट इस प्रकार दिया जाता है:

$Support(A=>B)=\frac{frequency(A,B)}{N}$

ध्यान दें: P(AUB) A और B के साथ-साथ होने की प्रायिकता है। P प्रायिकता को निरूपित करता है।

आगे बढ़ें, अभ्यास के तौर पर Milk=>Diaper का सपोर्ट निकालने का प्रयास करें।

  1. Confidence (c): नियम A=>B के लिए, कॉन्फिडेंस यह दर्शाता है कि B कितने प्रतिशत मामलों में A के साथ खरीदा गया।

$Confidence(A=>B)=\frac{P(A\cap B)}{P(A)}=\frac{frequency(A,B)}{frequency(A)}$

A और B दोनों वाले लेनदेन की संख्या, A वाले कुल लेनदेन की संख्या से विभाजित।

$Confidence(Bread=>Milk)=\frac{3}{4}=0.75=75\%$

अब Milk=>Diaper के लिए कॉन्फिडेंस निकालें।

ध्यान दें: सपोर्ट और कॉन्फिडेंस इस बात को मापते हैं कि नियम कितना रोचक है। इन्हें न्यूनतम सपोर्ट और न्यूनतम कॉन्फिडेंस थ्रेशहोल्ड से निर्धारित किया जाता है। ये थ्रेशहोल्ड, जो क्लाइंट द्वारा तय किए जाते हैं, आपको अपनी या क्लाइंट की प्राथमिकताओं के अनुसार नियम की ताकत की तुलना करने में मदद करते हैं। जितना अधिक थ्रेशहोल्ड के निकट, उतना ही नियम क्लाइंट के लिए उपयोगी।

  1. Frequent Itemsets: वे आइटम-सेट जिनका सपोर्ट न्यूनतम सपोर्ट थ्रेशहोल्ड (min_sup) से अधिक या बराबर हो। ऊपर के उदाहरण में min_sup=3 है। यह उपयोगकर्ता की पसंद से तय होता है।

  2. Strong rules: यदि नियम A=>B[Support, Confidence] min_sup और min_confidence को संतुष्ट करता है, तो वह एक स्ट्रॉन्ग रूल है।

  3. Lift: लिफ्ट नियम A=>B में A और B के बीच सहसम्बंध (correlation) देता है। सहसम्बंध बताता है कि आइटम-सेट A का आइटम-सेट B पर कितना प्रभाव है।

$Lift(A=>B)=\frac{Support}{Supp(A)Supp(B)}$

उदाहरण के लिए, नियम {Bread}=>{Milk} के लिए, लिफ्ट इस प्रकार निकलेगा:

$support(Bread)=\frac{4}{5}=0.8$

$support(Milk)=\frac{4}{5}=0.8$

$Lift(Bread=>Milk)=\frac{0.6}{0.8*0.8}=0.9$

  • यदि नियम का लिफ्ट 1 है, तो A और B स्वतंत्र हैं और उनसे कोई नियम नहीं निकाला जा सकता।

  • यदि लिफ्ट > 1 है, तो A और B एक-दूसरे पर निर्भर हैं, और निर्भरता की डिग्री लिफ्ट मान बताता है।

  • यदि लिफ्ट < 1 है, तो A की उपस्थिति B पर नकारात्मक प्रभाव डालेगी।

Goal of Association Rule Mining

जब आप दिए गए ट्रांजैक्शन सेट T पर एसोसिएशन रूल माइनिंग लागू करते हैं, तो आपका लक्ष्य होगा उन सभी नियमों को खोजना जिनके:

  1. सपोर्ट min_support से अधिक या बराबर हो
  2. कॉन्फिडेंस min_confidence से अधिक या बराबर हो

APRIORI Algorithm

ट्यूटोरियल के इस भाग में, आप उस एल्गोरिद्म के बारे में जानेंगे जो मार्केट बास्केट एनालिसिस के लिए R लाइब्रेरियों के पीछे चलता है। इससे आपको अपने क्लाइंट्स को बेहतर समझने और अधिक ध्यान से विश्लेषण करने में मदद मिलेगी। यदि आप पहले से APRIORI एल्गोरिद्म और उसके काम करने के तरीके के बारे में जानते हैं, तो आप सीधे कोडिंग भाग पर जा सकते हैं।

एसोसिएशन रूल माइनिंग को दो-चरणीय दृष्टिकोण के रूप में देखा जाता है:

  1. Frequent Itemset Generation: सभी फ़्रिक्वेंट आइटम-सेट्स खोजें जिनका सपोर्ट पूर्व-निर्धारित min_support काउंट से ≥ हो

  2. Rule Generation: फ़्रिक्वेंट आइटम-सेट्स से सभी एसोसिएशन रूल्स सूचीबद्ध करें। सभी नियमों के लिए सपोर्ट और कॉन्फिडेंस की गणना करें। वे नियम हटाएं (prune) जो min_support और min_confidence थ्रेशहोल्ड में विफल हों।

Frequent Itemset Generation सबसे अधिक गणनात्मक रूप से महंगा चरण है क्योंकि इसमें पूरे डेटाबेस को स्कैन करना पड़ता है।

ऊपर दिए गए चरणों में, फ़्रिक्वेंट आइटम-सेट जनरेशन गणना के लिहाज से सबसे महंगा है।

ऊपर आपने केवल 5 लेनदेन का उदाहरण देखा है, लेकिन वास्तविक दुनिया में रिटेल के ट्रांजैक्शन डेटा GBs और TBs तक हो सकते हैं, जिनके लिए एक अनुकूलित एल्गोरिद्म की आवश्यकता होती है ताकि उन आइटम-सेट्स को छाँटा जा सके जो अगले चरणों में सहायक नहीं होंगे। इसके लिए APRIORI एल्गोरिद्म का उपयोग किया जाता है। यह कहता है:

किसी फ़्रिक्वेंट आइटम-सेट का कोई भी सबसेट भी फ़्रिक्वेंट होना चाहिए। दूसरे शब्दों में, किसी इंफ्रिक्वेंट आइटम-सेट का कोई सुपरसैट न तो जनरेट किया जाए और न ही टेस्ट।

इसे आइटमसेट लैटिस में दर्शाया जाता है, जो APRIORI एल्गोरिद्म के सिद्धांत का एक ग्राफिकल निरूपण है। इसमें k-आइटम-सेट नोड और उस k-आइटम-सेट के सबसेट्स के संबंध होते हैं।

itemset lattice

आप ऊपर के चित्र में देख सकते हैं कि सबसे नीचे ट्रांजैक्शन डेटा की सभी वस्तुएं हैं और फिर आप ऊपर की ओर बढ़ते हुए सबसेट बनाते हैं जब तक कि नल सेट तक न पहुँच जाएं। d वस्तुओं के लिए लैटिस का आकार $2^d$ हो जाएगा। इससे पता चलता है कि प्रत्येक संयोजन के लिए सपोर्ट निकालकर फ़्रिक्वेंट आइटम-सेट जनरेट करना कितना कठिन होगा। निम्नलिखित चित्र दिखाता है कि APRIORI सेटों की संख्या घटाने में कितना मदद करता है:

itemset lattice 2

यदि आइटम-सेट {a,b} इंफ्रिक्वेंट है तो हमें उसके सभी सुपरसैट्स पर विचार करने की आवश्यकता नहीं है।

इसे एक उदाहरण से समझते हैं। निम्न उदाहरण में आप देखेंगे कि APRIORI एक प्रभावी एल्गोरिद्म क्यों है और साथ ही चरण-दर-चरण मजबूत एसोसिएशन रूल्स कैसे जनरेट होते हैं। अपने नोटबुक और पेन के साथ साथ चलें!

example

जैसा कि आप देख सकते हैं, आप 1-आइटम-सेट के लिए कैंडिडेट लिस्ट बनाकर शुरू करते हैं जिसमें ट्रांजैक्शन डेटा में मौजूद सभी वस्तुएं, व्यक्तिगत रूप से, शामिल होंगी। वास्तविक दुनिया के रिटेल ट्रांजैक्शन डेटा को देखते हुए, आप समझ सकते हैं कि यह कैंडिडेट जनरेशन कितना महंगा है। यहाँ APRIORI अपनी भूमिका निभाता है और कैंडिडेट लिस्ट की संख्या कम करने में मदद करता है, और अंत में उपयोगी नियम जनरेट होते हैं। अगले चरणों में, आप देखेंगे कि हम एसोसिएशन रूल माइनिंग के पहले चरण यानी फ़्रिक्वेंट आइटम-सेट जनरेशन के अंत तक कैसे पहुँचते हैं।

example

आपका अगला कदम सभी फ़्रिक्वेंट आइटम-सेट्स को सूचीबद्ध करना होगा। आप अंतिम नॉन-एम्प्टी फ़्रिक्वेंट आइटम-सेट लेंगे, जो इस उदाहरण में L2={I1, I2},{I2, I3} है। फिर उस फ़्रिक्वेंट आइटम-सेट लिस्ट में मौजूद आइटम-सेट्स के सभी नॉन-एम्प्टी सबसेट्स बनाएं। नीचे दी गई चित्रात्मक व्याख्या के अनुसार आगे बढ़ें:

example

आप ऊपर देख सकते हैं कि चार मजबूत नियम हैं। उदाहरण के लिए, ${I2}=>I3$ जिसका कॉन्फिडेंस 75% के बराबर है, बताता है कि जिन लोगों ने I2 खरीदा उनमें से 75% ने I3 भी खरीदा।

अब आपने संपूर्ण APRIORI एल्गोरिद्म सीख लिया है, जो डेटा माइनिंग में सबसे अधिक उपयोग किए जाने वाले एल्गोरिद्म्स में से एक है। अब कोड पर चलते हैं, फ्यूँ!

R का उपयोग करके MBA/Association Rule Mining लागू करना

इस ट्यूटोरियल में, आप UCI Machine Learning Repository का एक डेटासेट उपयोग करेंगे। डेटासेट का नाम Online-Retail है, और आप इसे यहाँ से डाउनलोड कर सकते हैं। यह डेटासेट 01/12/2010 से 09/12/2011 तक के लेनदेन डेटा को शामिल करता है, जो यूके-आधारित रजिस्टर्ड नॉन-स्टोर ऑनलाइन रिटेल का है। इसे और R के बिल्ट-इन डेटासेट्स को नहीं लेने का कारण यह है कि आपको रिटेल डेटा इसी रूप में मिलने की अधिक संभावना है, जिस पर आपको डेटा प्री-प्रोसेसिंग लागू करनी होगी।

Dataset Description

  • पंक्तियों की संख्या:541909
  • गुणों (Attributes) की संख्या:08
Attribute Information
  • InvoiceNo: चालान संख्या। नोमिनल, 6-अंकों की पूर्णांक संख्या जो प्रत्येक लेनदेन को अद्वितीय रूप से सौंपी जाती है। यदि यह कोड अक्षर 'c' से शुरू होता है, तो यह रद्दीकरण को दर्शाता है। +StockCode: उत्पाद (आइटम) कोड। नोमिनल, 5-अंकों की पूर्णांक संख्या जो प्रत्येक अलग उत्पाद को अद्वितीय रूप से सौंपी जाती है।
  • Description: उत्पाद (आइटम) का नाम। नोमिनल।
  • Quantity: प्रति लेनदेन प्रत्येक उत्पाद (आइटम) की मात्रा। संख्यात्मक।
  • InvoiceDate: चालान की तिथि और समय। संख्यात्मक, वह दिन और समय जब प्रत्येक लेनदेन जनरेट हुआ। डेटासेट से उदाहरण: 12/1/2010 8:26
  • UnitPrice: यूनिट प्राइस। संख्यात्मक, प्रति यूनिट उत्पाद का मूल्य (स्टर्लिंग में)।
  • CustomerID: ग्राहक संख्या। नोमिनल, 5-अंकों की पूर्णांक संख्या जो प्रत्येक ग्राहक को अद्वितीय रूप से सौंपी जाती है।
  • Country: देश का नाम। नोमिनल, वह देश जहाँ प्रत्येक ग्राहक निवास करता है।

Loading Libraries

सबसे पहले, आप आवश्यक लाइब्रेरियाँ लोड करेंगे। लाइब्रेरियों का एक संक्षिप्त विवरण (जो यहाँ से लिया गया है) नीचे दी गई तालिका में दिया गया है, ताकि आपको पता हो कि हर लाइब्रेरी क्या करती है:

PackageDescription
arulesट्रांजैक्शन डेटा और पैटर्न्स (फ्रिक्वेंट आइटमसेट्स और एसोसिएशन रूल्स) को निरूपित करने, संशोधित करने और विश्लेषण करने के लिए बुनियादी ढांचा प्रदान करता है।
arulesVizपैकेज 'arules' को एसोसिएशन रूल्स और आइटम-सेट्स के लिए विभिन्न विज़ुअलाइज़ेशन तकनीकों के साथ विस्तार देता है। पैकेज में रूल एक्सप्लोरेशन के लिए कई इंटरैक्टिव विज़ुअलाइज़ेशन भी शामिल हैं।
tidyverseटाइडिवर्स डेटा साइंस के लिए डिज़ाइन किए गए R पैकेजों का एक सुविचारित संग्रह है
readxlR में Excel फ़ाइलें पढ़ें
plyrडेटा को विभाजित करने, लागू करने और संयोजित करने के लिए टूल्स
ggplot2ग्राफ़िक्स और चार्ट बनाएं
knitrR में डायनेमिक रिपोर्ट जेनरेशन
lubridateLubridate एक R पैकेज है जो तिथियों और समय के साथ काम करना आसान बनाता है।
#install and load package arules
#install.packages("arules")
library(arules)
#install and load arulesViz
#install.packages("arulesViz")
library(arulesViz)
#install and load tidyverse
#install.packages("tidyverse")
library(tidyverse)
#install and load readxml
#install.packages("readxml")
library(readxl)
#install and load knitr
#install.packages("knitr")
library(knitr)
#load ggplot2 as it comes in tidyverse
library(ggplot2)
#install and load lubridate
#install.packages("lubridate")
library(lubridate)
#install and load plyr
#install.packages("plyr")
library(plyr)
library(dplyr)

Data Pre-processing

डाउनलोड की गई फ़ाइल से डेटासेट को R में पढ़ने के लिए read_excel(path to file) का उपयोग करें। read_excel(path-to-file-with-filename) में फ़ाइल का पूरा पथ, फ़ाइल नाम सहित दें।

#read excel into R dataframe
retail <- read_excel('D:/Documents/Online_Retail.xlsx')
#complete.cases(data) will return a logical vector indicating which rows have no missing values. Then use the vector to get only rows that are complete using retail[,].
retail <- retail[complete.cases(retail), ]
#mutate function is from dplyr package. It is used to edit or add new columns to dataframe. Here Description column is being converted to factor column. as.factor converts column to factor column. %>% is an operator with which you may pipe values to another function or expression
retail %>% mutate(Description = as.factor(Description))
retail %>% mutate(Country = as.factor(Country))
#Converts character data to date. Store InvoiceDate as date in new variable
retail$Date <- as.Date(retail$InvoiceDate)
#Extract time from InvoiceDate and store in another variable
TransTime<- format(retail$InvoiceDate,"%H:%M:%S")
#Convert and edit InvoiceNo into numeric
InvoiceNo <- as.numeric(as.character(retail$InvoiceNo))
NAs introduced by coercion
#Bind new columns TransTime and InvoiceNo into dataframe retail
cbind(retail,TransTime)
cbind(retail,InvoiceNo)
#get a glimpse of your data
glimpse(retail)

नोट: पृष्ठ 1 का 100।
Observations: 406,829
Variables: 9
$ InvoiceNo   <chr> "536365", "536365", "536365", "536365", "536365", "536365", "53...
$ StockCode   <chr> "85123A", "71053", "84406B", "84029G", "84029E", "22752", "2173...
$ Description <chr> "WHITE HANGING HEART T-LIGHT HOLDER", "WHITE METAL LANTERN", "C...
$ Quantity    <dbl> 6, 6, 8, 6, 6, 2, 6, 6, 6, 32, 6, 6, 8, 6, 6, 3, 2, 3, 3, 4, 4,...
$ InvoiceDate <dttm> 2010-12-01 08:26:00, 2010-12-01 08:26:00, 2010-12-01 08:26:00,...
$ UnitPrice   <dbl> 2.55, 3.39, 2.75, 3.39, 3.39, 7.65, 4.25, 1.85, 1.85, 1.69, 2.1...
$ CustomerID  <dbl> 17850, 17850, 17850, 17850, 17850, 17850, 17850, 17850, 17850, ...
$ Country     <chr> "United Kingdom", "United Kingdom", "United Kingdom", "United K...
$ Date        <date> 2010-12-01, 2010-12-01, 2010-12-01, 2010-12-01, 2010-12-01, 20...

अब, डेटाफ्रेम retail में 10 गुण होंगे, जिनमें दो अतिरिक्त गुण Date और Time हैं।

MBA/एसोसिएशन रूल माइनिंग लागू करने से पहले, हमें डेटाफ्रेम को ट्रांजैक्शन डेटा में बदलना होगा ताकि एक चालान में साथ खरीदी गई सभी वस्तुएं एक ही पंक्ति में हों। आप glimpse आउटपुट में देख सकते हैं कि प्रत्येक लेनदेन परमाणवी (atomic) रूप में है, यानी एक चालान से संबंधित सभी उत्पाद रिलेशनल डेटाबेस की तरह अलग-अलग हैं। इस फ़ॉर्मैट को singles फ़ॉर्मैट भी कहा जाता है।

आपको जो करना है वह है retail डेटाफ्रेम में डेटा को या तो CustomerID, CustomerID और Date के आधार पर समूहित करना, या आप InvoiceNo और Date का उपयोग करके भी समूह बना सकते हैं। हमें इस ग्रुपिंग की आवश्यकता है, उस पर एक फ़ंक्शन लागू करना है और आउटपुट को दूसरे डेटाफ्रेम में स्टोर करना है। यह ddply से किया जा सकता है।

निम्नलिखित कोड की पंक्तियाँ एक ही InvoiceNo और date से सभी उत्पादों को मिलाएँगी और उस InvoiceNo और date के सभी उत्पादों को एक पंक्ति के रूप में जोड़ देंगी, जिसमें प्रत्येक आइटम , से अलग होगा

library(plyr)
#ddply(dataframe, variables_to_be_used_to_split_data_frame, function_to_be_applied)
transactionData <- ddply(retail,c("InvoiceNo","Date"),
                       function(df1)paste(df1$Description,
                       collapse = ","))
#The R function paste() concatenates vectors to character and separated results using collapse=[any optional charcater string ]. Here ',' is used
transactionData

नोट: पृष्ठ 1 का 100।

अगले चरण में, क्योंकि रूल माइनिंग में InvoiceNo और Date का उपयोग नहीं होगा, आप इन्हें NULL सेट कर सकते हैं।

#set column InvoiceNo of dataframe transactionData  
transactionData$InvoiceNo <- NULL
#set column Date of dataframe transactionData
transactionData$Date <- NULL
#Rename column to items
colnames(transactionData) <- c("items")
#Show Dataframe transactionData
transactionData

नोट: पृष्ठ 1 का 100।

ट्रांजैक्शन डेटा के लिए इस फ़ॉर्मैट को basket फ़ॉर्मैट कहा जाता है। अगला कदम, आपको इस ट्रांजैक्शन डेटा को एक .csv (कॉमा सेपरेटेड वैल्यूज़) फ़ाइल में स्टोर करना है। इसके लिए, write.csv()

write.csv(transactionData,"D:/Documents/market_basket_transactions.csv", quote = FALSE, row.names = FALSE)
#transactionData: Data to be written
#"D:/Documents/market_basket.csv": location of file with file name to be written to
#quote: If TRUE it will surround character or factor column with double quotes. If FALSE nothing will be quoted
#row.names: either a logical value indicating whether the row names of x are to be written along with x, or a character vector of row names to be written.

देखें कि आपका ट्रांजैक्शन डेटा सही फ़ॉर्म में है या नहीं:

transaction data

अगले चरण में, आपको इस ट्रांजैक्शन डेटा को ट्रांजैक्शन क्लास की एक ऑब्जेक्ट में लोड करना होगा। यह arules पैकेज के R फ़ंक्शन read.transactions का उपयोग करके किया जाता है।

निम्न कोड पंक्ति basket फ़ॉर्मैट में मौजूद ट्रांजैक्शन डेटा फ़ाइल D:/Documents/market_basket_transactions.csv लेगी और इसे ट्रांजैक्शन क्लास की ऑब्जेक्ट में बदल देगी।

tr <- read.transactions('D:/Documents/market_basket_transactions.csv', format = 'basket', sep=',')
#sep tell how items are separated. In this case you have separated using ','

जब आप ऊपर दी गई कोड पंक्तियाँ चलाएँगे तो आपको अपने आउटपुट में बहुत से EOF within quoted string दिख सकते हैं, इसकी चिंता न करें।

यदि आपके पास पहले से डेटाफ्रेम में ट्रांजैक्शन डेटा है, तो उसे ट्रांजैक्शन ऑब्जेक्ट में बदलने के लिए निम्न कोड पंक्ति का उपयोग करें:

          `trObj<-as(dataframe.dat,"transactions")`

tr ट्रांजैक्शन ऑब्जेक्ट देखें:

tr
transactions in sparse format with
 22191 transactions (rows) and
 30066 items (columns)
 summary(tr)
 
transactions in sparse format with
 22191 transactions (rows) and
 7876 items (columns)
transactions as itemMatrix in sparse format with
 22191 rows (elements/itemsets/transactions) and
 7876 columns (items) and a density of 0.001930725

most frequent items:
WHITE HANGING HEART T-LIGHT HOLDER           REGENCY CAKESTAND 3 TIER
                              1803                               1709
           JUMBO BAG RED RETROSPOT                      PARTY BUNTING
                              1460                               1285
     ASSORTED COLOUR BIRD ORNAMENT                            (Other)
                              1250                             329938

element (itemset/transaction) length distribution:
sizes
   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17
3598 1594 1141  908  861  758  696  676  663  593  624  537  516  531  551  522  464
  18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34
 441  483  419  395  315  306  272  238  253  229  213  222  215  170  159  138  142
  35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51
 134  109  111   90  113   94   93   87   88   65   63   67   63   60   59   49   64
  52   53   54   55   56   57   58   59   60   61   62   63   64   65   66   67   68
  40   41   49   43   36   29   39   30   27   28   17   25   25   20   27   24   22
  69   70   71   72   73   74   75   76   77   78   79   80   81   82   83   84   85
  15   20   19   13   16   16   11   15   12    7    9   14   15   12    8    9   11
  86   87   88   89   90   91   92   93   94   95   96   97   98   99  100  101  102
  11   14    8    6    5    6   11    6    4    4    3    6    5    2    4    2    4
 103  104  105  106  107  108  109  110  111  112  113  114  116  117  118  120  121
   4    3    2    2    6    3    4    3    2    1    3    1    3    3    3    1    2
 122  123  125  126  127  131  132  133  134  140  141  142  143  145  146  147  150
   2    1    3    2    2    1    1    2    1    1    2    2    1    1    2    1    1
 154  157  168  171  177  178  180  202  204  228  236  249  250  285  320  400  419
   3    2    2    2    1    1    1    1    1    1    1    1    1    1    1    1    1

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   1.00    3.00   10.00   15.21   21.00  419.00

includes extended item information - examples:
                      labels
1                   1 HANGER
2     10 COLOUR SPACEBOY PEN
3 12 COLOURED PARTY BALLOONS

summary(tr) एक बहुत उपयोगी कमांड है जो हमें हमारे ट्रांजैक्शन ऑब्जेक्ट के बारे में जानकारी देता है। आइए देखें कि ऊपर का आउटपुट क्या कहता है:

  • यहाँ 22191 लेनदेन (पंक्तियाँ) और 7876 वस्तुएँ (कॉलम) हैं। ध्यान दें कि 7876 डेटासेट में शामिल उत्पाद विवरणों की संख्या है और 22191 लेनदेन इन वस्तुओं के संग्रह हैं।

  • घनत्व (Density) स्पार्स मैट्रिक्स में नॉन-ज़ीरो कोशिकाओं का प्रतिशत बताता है। आप इसे इस तरह भी कह सकते हैं कि खरीदी गई कुल वस्तुओं की संख्या, उस मैट्रिक्स में संभावित वस्तुओं की संख्या से विभाजित। आप डेंसिटी का उपयोग करके खरीदी गई वस्तुओं की संख्या निकाल सकते हैं: 22191x7876x0.001930725=337445

जानकारी! स्पार्स मैट्रिक्स: स्पार्स मैट्रिक्स या स्पार्स एरे वह मैट्रिक्स है जिसमें अधिकांश अवयव शून्य होते हैं। इसके विपरीत, यदि अधिकांश अवयव नॉन-ज़ीरो हों, तो मैट्रिक्स को डेंस माना जाता है। शून्य-मूल्य वाले अवयवों की संख्या को कुल अवयवों की संख्या से विभाजित करने पर प्राप्त मान मैट्रिक्स की स्पार्सिटी कहलाती है (जो डेंसिटी के 1 माइनस के बराबर होती है)।

  • समरी आपको सबसे अधिक बार आने वाली वस्तुओं के बारे में भी बताती है।

  • एलीमेंट (आइटमसेट/ट्रांजैक्शन) लंबाई वितरण: यह बता रहा है कि 1-आइटमसेट, 2-आइटमसेट आदि के लिए कितने लेनदेन हैं। पहली पंक्ति वस्तुओं की संख्या बता रही है और दूसरी पंक्ति लेनदेन की संख्या।

उदाहरण के लिए, केवल 3598 लेनदेन एक वस्तु के लिए हैं, 1594 लेनदेन 2 वस्तुओं के लिए हैं, और एक लेनदेन में 419 वस्तुएँ हैं जो सबसे लंबा है।

आप itemFrequencyPlot जनरेट कर सकते हैं जो itemMatrix पर आधारित ऑब्जेक्ट्स के वितरण को देखने के लिए आइटम फ्रीक्वेंसी बार प्लॉट बनाता है (जैसे, >transactions या >itemsets और >rules में वस्तुएँ), जो हमारे मामले में लागू है।

# Create an item frequency plot for the top 20 items
if (!require("RColorBrewer")) {
  # install color package of R
install.packages("RColorBrewer")
#include library RColorBrewer
library(RColorBrewer)
}
itemFrequencyPlot(tr,topN=20,type="absolute",col=brewer.pal(8,'Pastel2'), main="Absolute Item Frequency Plot")
absolute item frequency plot

इस 

itemFrequencyPlot(tr,topN=20,type="absolute")

का पहला आर्ग्युमेंट प्लॉट किए जाने वाला ट्रांजैक्शन ऑब्जेक्ट है यानी tr। topN आपको टॉप N उच्चतम फ्रीक्वेंसी वाली वस्तुएँ प्लॉट करने देता है। type type="absolute" या type="relative" हो सकता है। यदि absolute है तो यह प्रत्येक आइटम की संख्यात्मक फ्रीक्वेंसियाँ स्वतंत्र रूप से प्लॉट करेगा। यदि relative है तो यह प्लॉट करेगा कि अन्य के मुकाबले ये आइटम कितनी बार आए हैं।

relative item frequency plot
itemFrequencyPlot(tr,topN=20,type="relative",col=brewer.pal(8,'Pastel2'),main="Relative Item Frequency Plot")

यह प्लॉट दिखाता है कि 'WHITE HANGING HEART T-LIGHT HOLDER' और 'REGENCY CAKESTAND 3 TIER' की बिक्री सबसे अधिक है। इसलिए 'SET OF 3 CAKE TINS PANTRY DESIGN' की बिक्री बढ़ाने के लिए रिटेलर इसे 'REGENCY CAKESTAND 3 TIER' के पास रख सकता/सकती है।

आप itemFrequencyPlot के अन्य विकल्पों का पता यहाँ लगा सकते हैं।

Generating Rules!

अगला कदम APRIORI एल्गोरिद्म का उपयोग करके नियमों का खनन (माइन) करना है। फ़ंक्शन apriori() पैकेज arules से है।

# Min Support as 0.001, confidence as 0.8.
association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8,maxlen=10))
 Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen maxlen target
        0.8    0.1    1 none FALSE            TRUE       5   0.001      1     10  rules
   ext
 FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 22

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[30066 item(s), 22191 transaction(s)] done [0.11s].
sorting and recoding items ... [2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 1 2 3 4 5 6 7 8 9 10
Mining stopped (maxlen reached). Only patterns up to a length of 10 returned!
 done [0.70s].
writing ... [49122 rule(s)] done [0.06s].
creating S4 object  ... done [0.06s]. 
set of 49122 rules

rule length distribution (lhs + rhs):sizes
    2     3     4     5     6     7     8     9    10
  105  2111  6854 16424 14855  6102  1937   613   121

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  2.000   5.000   5.000   5.499   6.000  10.000

summary of quality measures:
    support           confidence          lift             count       
 Min.   :0.001036   Min.   :0.8000   Min.   :  9.846   Min.   : 23.00  
 1st Qu.:0.001082   1st Qu.:0.8333   1st Qu.: 22.237   1st Qu.: 24.00  
 Median :0.001262   Median :0.8788   Median : 28.760   Median : 28.00  
 Mean   :0.001417   Mean   :0.8849   Mean   : 64.589   Mean   : 31.45  
 3rd Qu.:0.001532   3rd Qu.:0.9259   3rd Qu.: 69.200   3rd Qu.: 34.00  
 Max.   :0.015997   Max.   :1.0000   Max.   :715.839   Max.   :355.00  

mining info:
 data ntransactions support confidence
   tr         22191   0.001        0.8

apriori tr को उस ट्रांजैक्शन ऑब्जेक्ट के रूप में लेगा जिस पर माइनिंग लागू की जानी है। parameter आपको min_sup और min_confidence सेट करने देगा। parameter के डिफ़ॉल्ट मान हैं: न्यूनतम सपोर्ट 0.1, न्यूनतम कॉन्फिडेंस 0.8, अधिकतम 10 आइटम (maxlen)।

summary(association.rules) निम्नलिखित दिखाता है:

  • Parameter Specification: min_sup=0.001 और min_confidence=0.8 के मान, और एक नियम में अधिकतम 10 आइटम।

  • कुल नियमों की संख्या: 49122 नियमों का सेट

  • रूल लंबाई का वितरण: 5 आइटम की लंबाई में सबसे अधिक नियम: 16424 और 2 आइटम की लंबाई में सबसे कम नियम: 105

  • क्वालिटी मापों का सारांश: सपोर्ट, कॉन्फिडेंस और लिफ्ट के लिए न्यूनतम और अधिकतम मान।

  • नियम बनाने में उपयोग की गई जानकारी: वह डेटा, सपोर्ट और कॉन्फिडेंस जो हमने एल्गोरिद्म को प्रदान किए।

चूँकि 49122 नियम हैं, आइए केवल शीर्ष 10 प्रिंट करें:

inspect(association.rules[1:10])
     lhs                         rhs             support     confidence lift      count
[1]  {WOBBLY CHICKEN}         => {METAL}         0.001261773 1          443.82000 28   
[2]  {WOBBLY CHICKEN}         => {DECORATION}    0.001261773 1          443.82000 28   
[3]  {DECOUPAGE}              => {GREETING CARD} 0.001036456 1          389.31579 23   
[4]  {BILLBOARD FONTS DESIGN} => {WRAP}          0.001306836 1          715.83871 29   
[5]  {WOBBLY RABBIT}          => {METAL}         0.001532153 1          443.82000 34   
[6]  {WOBBLY RABBIT}          => {DECORATION}    0.001532153 1          443.82000 34   
[7]  {FUNK MONKEY}            => {ART LIGHTS}    0.001712406 1          583.97368 38   
[8]  {ART LIGHTS}             => {FUNK MONKEY}   0.001712406 1          583.97368 38   
[9]  {BLACK TEA}              => {SUGAR JARS}    0.002072912 1          238.61290 46   
[10] {BLACK TEA}              => {COFFEE}        0.002072912 1           69.34687 46 

उपरोक्त आउटपुट का उपयोग करके, आप ऐसे विश्लेषण कर सकते हैं, जैसे:

  • 'WOBBLY CHICKEN' खरीदने वाले 100% ग्राहकों ने 'METAL' भी खरीदा।

  • 'BLACK TEA' खरीदने वाले 100% ग्राहकों ने 'SUGAR JARS' भी खरीदे।

नियमों की संख्या और आकार सीमित करना

आप जनरेट किए गए नियमों की संख्या और आकार को कैसे सीमित कर सकते हैं? आप यह apriori में parameters सेट करके कर सकते हैं। आप इन पैरामीटर्स को इस अनुसार सेट करते हैं कि आपको कितने नियम चाहिए। यदि आप मजबूत नियम चाहते हैं, तो आप conf का मान बढ़ा सकते हैं और अधिक लंबाई वाले नियमों के लिए maxlen का मान अधिक दें।

shorter.association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8,maxlen=3))

बेमानी (रेडंडेंट) नियम हटाना

आप बड़े नियमों के उपसमुच्चय (subsets) वाले नियम हटा सकते हैं। ऐसे नियम हटाने के लिए नीचे दिया गया कोड उपयोग करें:

subset.rules <- which(colSums(is.subset(association.rules, association.rules)) > 1) # get subset rules in vector
length(subset.rules)  #> 3913
[1] 44014
subset.association.rules. <- association.rules[-subset.rules] # remove subset rules.
  • which() उस वेक्टर में उन तत्त्वों की स्थिति लौटाता है जिनका मान TRUE होता है।

  • colSums() डेटा फ्रेम और संख्यात्मक ऐरे के लिए पंक्ति और स्तंभ योग बनाता है।

  • is.subset() निर्धारित करता है कि क्या एक वेक्टर के तत्त्व दूसरे के सभी तत्त्वों को समाहित करते हैं

कभी-कभी, आप किसी विशेष उत्पाद पर काम करना चाहेंगे। यदि आप जानना चाहते हैं कि आइटम X की खरीद पर किन कारणों का प्रभाव पड़ता है, तो आप apriori कमांड में appearance विकल्प का उपयोग कर सकते हैं। appearance हमें नियम के LHS (IF भाग) और RHS (THEN भाग) सेट करने के विकल्प देता है।

उदाहरण के लिए, यह जानने के लिए कि ग्राहक 'METAL' खरीदने से पहले क्या खरीदते हैं, नीचे दी गई कोड लाइन चलाएँ:

metal.association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8),appearance = list(default="lhs",rhs="METAL"))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen maxlen target
        0.8    0.1    1 none FALSE            TRUE       5   0.001      1     10  rules
   ext
 FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 22

set item appearances ...[1 item(s)] done [0.00s].
set transactions ...[30066 item(s), 22191 transaction(s)] done [0.21s].
sorting and recoding items ... [2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 1 2 3 4 5 6 7 8 9 10
Mining stopped (maxlen reached). Only patterns up to a length of 10 returned!
 done [0.63s].
writing ... [5 rule(s)] done [0.07s].
creating S4 object  ... done [0.02s]. 
# Here lhs=METAL because you want to find out the probability of that in how many customers buy METAL along with other items
inspect(head(metal.association.rules))
    lhs                            rhs     support     confidence lift   count
[1] {WOBBLY CHICKEN}            => {METAL} 0.001261773 1          443.82 28   
[2] {WOBBLY RABBIT}             => {METAL} 0.001532153 1          443.82 34   
[3] {DECORATION}                => {METAL} 0.002253166 1          443.82 50   
[4] {DECORATION,WOBBLY CHICKEN} => {METAL} 0.001261773 1          443.82 28   
[5] {DECORATION,WOBBLY RABBIT}  => {METAL} 0.001532153 1          443.82 34 

इसी तरह, प्रश्न का उत्तर ढूंढने के लिए जिन ग्राहकों ने METAL खरीदा उन्होंने साथ में और क्या खरीदा.... आप METAL को lhs पर रखेंगे:

metal.association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8),appearance = list(lhs="METAL",default="rhs"))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen maxlen target
        0.8    0.1    1 none FALSE            TRUE       5   0.001      1     10  rules
   ext
 FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 22

set item appearances ...[1 item(s)] done [0.00s].
set transactions ...[30066 item(s), 22191 transaction(s)] done [0.10s].
sorting and recoding items ... [2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 1 2 done [0.01s].
writing ... [1 rule(s)] done [0.00s].
creating S4 object  ... done [0.01s].
# Here lhs=METAL because you want to find out the probability of that in how many customers buy METAL along with other items
inspect(head(metal.association.rules))
    lhs        rhs          support     confidence lift   count
[1] {METAL} => {DECORATION} 0.002253166 1          443.82 50 

एसोसिएशन नियमों का विज़ुअलाइज़ेशन

क्योंकि डेटा के आधार पर सैकड़ों या हजारों नियम बनेंगे, आपको अपने निष्कर्षों को प्रस्तुत करने के लिए कुछ तरीके चाहिए। ऊपर ItemFrequencyPlot पर पहले ही चर्चा हो चुकी है, जो सबसे अधिक बिकने वाले आइटम्स पाने का एक बेहतरीन तरीका है।

यहाँ निम्नलिखित विज़ुअलाइज़ेशन पर चर्चा होगी:

  • स्कैटर-प्लॉट
  • इंटरैक्टिव स्कैटर-प्लॉट
  • व्यक्तिगत नियम अभिविन्यास

स्कैटर-प्लॉट

एसोसिएशन नियमों का सीधा-सादा विज़ुअलाइज़ेशन arulesViz पैकेज के plot() का उपयोग करके स्कैटर प्लॉट बनाना है। इसमें अक्षों पर Support और Confidence होते हैं। साथ ही, तीसरा माप Lift डिफ़ॉल्ट रूप से बिंदुओं के रंग (ग्रे स्तर) के लिए उपयोग होता है।

# Filter rules with confidence greater than 0.4 or 40%
subRules<-association.rules[quality(association.rules)$confidence>0.4]
#Plot SubRules
plot(subRules)
स्कैटर प्लॉट

ऊपर दिया गया प्लॉट दिखाता है कि उच्च लिफ्ट वाले नियमों का सपोर्ट कम होता है। आप प्लॉट के लिए निम्नलिखित विकल्पों का उपयोग कर सकते हैं:

plot(rulesObject, measure, shading, method)
  • rulesObject: प्लॉट किए जाने वाला नियम ऑब्जेक्ट

  • measure: नियम की रोचकता के माप। Support, Confidence, lift या method के मान के अनुसार इनका संयोजन हो सकता है।

  • shading: बिंदुओं के रंग के लिए प्रयुक्त माप (Support, Confidence, lift)। डिफ़ॉल्ट Lift है।

  • method: प्रयुक्त विज़ुअलाइज़ेशन विधि (scatterplot, two-key plot, matrix3D)।

plot(subRules,method="two-key plot")
टू-की प्लॉट

टू-की प्लॉट में क्रमशः x और y-अक्ष पर सपोर्ट और कॉन्फिडेंस होते हैं। यह रंग के लिए order का उपयोग करता है। Order नियम में आइटम्स की संख्या है।

इंटरैक्टिव स्कैटर-प्लॉट

नियमों को प्रस्तुत करने के लिए arulesViz और plotly का उपयोग करके एक शानदार इंटरैक्टिव प्लॉट बनाया जा सकता है। आप हर नियम पर होवर कर सकते हैं और सभी क्वालिटी माप (support, confidence और lift) देख सकते हैं।

plotly_arules(subRules)
'plotly_arules' is deprecated.
Use 'plot' instead.
See help("Deprecated")plot: Too many rules supplied. Only plotting the best 1000 rules using measure lift (change parameter max if needed)To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.

ग्राफ-आधारित विज़ुअलाइज़ेशन

ग्राफ-आधारित तकनीकें वर्टिसेज़ और एजेज़ का उपयोग करके एसोसिएशन नियमों को विज़ुअलाइज़ करती हैं, जहाँ वर्टिसेज़ पर आइटम नाम लगे होते हैं, और आइटम सेट्स या नियमों को वर्टिसेज़ के दूसरे सेट के रूप में दर्शाया जाता है। आइटम्स को आइटम-सेट्स/नियमों से निर्देशित तीरों के माध्यम से जोड़ा जाता है। आइटम्स से नियम वर्टेक्स की ओर इशारा करते तीर LHS आइटम्स को इंगित करते हैं और नियम से आइटम की ओर तीर RHS को दर्शाता है। वर्टिसेज़ का आकार और रंग अक्सर इंटरेस्ट मापों का प्रतिनिधित्व करते हैं।

ग्राफ प्लॉट नियमों को विज़ुअलाइज़ करने का बेहतरीन तरीका हैं लेकिन नियमों की संख्या बढ़ने पर ये भीड़भाड़ वाले हो जाते हैं। इसलिए ग्राफ-आधारित विज़ुअलाइज़ेशन के साथ कम नियमों का विज़ुअलाइज़ेशन करना बेहतर है।

आइए subRules से सबसे अधिक कॉन्फिडेंस वाले 10 नियम चुनते हैं।

top10subRules <- head(subRules, n = 10, by = "confidence")

अब, एक इंटरैक्टिव ग्राफ प्लॉट करें:

नोट: आप plot में engine=htmlwidget पैरामीटर का उपयोग करके अपने सभी प्लॉट्स को इंटरैक्टिव बना सकते हैं

plot(top10subRules, method = "graph",  engine = "htmlwidget")
ग्राफ

arulesViz से एसोसिएशन नियमों के सेट के लिए ग्राफ्स को GraphML फ़ॉर्मेट में या Graphviz dot-file के रूप में एक्सपोर्ट किया जा सकता है ताकि उन्हें Gephi जैसे टूल्स में एक्सप्लोर किया जा सके। उदाहरण के लिए, सबसे अधिक लिफ्ट वाले 1000 नियमों को इस प्रकार एक्सपोर्ट किया जाता है:

saveAsGraph(head(subRules, n = 1000, by = "lift"), file = "rules.graphml")

व्यक्तिगत नियम अभिविन्यास

इसे पैरेलल कोऑर्डिनेट्स प्लॉट भी कहा जाता है। यह देखने में उपयोगी है कि कौन से उत्पाद किन आइटम्स के साथ किस तरह की बिक्री का कारण बनते हैं।

जैसा कि ऊपर बताया गया, RHS परिणाम (Consequent) है या वह आइटम जिसे हम मानते हैं कि ग्राहक खरीदेगा; स्थितियाँ LHS में होती हैं जहाँ 2 हमारी टोकरी (basket) में सबसे हाल का जोड़ है और 1 वह आइटम है जो पहले से था।

# Filter top 20 rules with highest lift
subRules2<-head(subRules, n=20, by="lift")
plot(subRules2, method="paracoord")
पैरेलल कोऑर्डिनेट्स प्लॉट

सबसे ऊपर वाले तीर को देखें। यह दिखाता है कि जब मेरे शॉपिंग कार्ट में 'CHILDS GARDEN SPADE PINK' और 'CHILDS GARDEN RAKE PINK' होते हैं, तो मैं इनके साथ 'CHILDS GARDEN RAKE BLUE' खरीदने की भी संभावना रखता हूँ।

निष्कर्ष

बधाई हो! आपने APRIORI सीखा, जो डेटा माइनिंग में सबसे ज़्यादा उपयोग किए जाने वाले एल्गोरिद्म्स में से एक है। आपने एसोसिएशन रूल माइनिंग, उसके अनुप्रयोगों, और रिटेलिंग में उसके अनुप्रयोग—जिसे मार्केट बास्केट विश्लेषण कहा जाता है—के बारे में सब कुछ सीखा। अब आप R में मार्केट बास्केट विश्लेषण लागू करने और अपने एसोसिएशन नियमों को बेहतरीन प्लॉट्स के साथ प्रस्तुत करने में भी सक्षम हैं! सीखते रहें!

संदर्भ:

  1. https://datascienceplus.com/a-gentle-introduction-on-market-basket-analysis%E2%80%8A-%E2%80%8Aassociation-rules/

  2. https://en.wikipedia.org/wiki/Sparse_matrix

  3. https://cran.r-project.org/web/packages/arulesViz/vignettes/arulesViz.pdf

यदि आप R के बारे में और सीखना चाहते हैं, तो DataCamp का Importing and Managing Financial Data in R कोर्स लें।

विषय