1 ОРШИЛ

Өдөр бүр байгууллага аж ахуй нэгж дээр асар их хэмжээний өгөгдөл үүсч байна. Бид өөрсдөө ч мэдэлгүй өөрсөдтэйгээ холбоотой их өгөгдлийг үүсгэдэг болов. Гэтэл энэ их өгөгдлийг боловсруулж шинжлэх нь улам хүндрэлтэй болж байна. Иймд өгөгдөл олборлолтонд анхаарал хандуулж түүнийг ашиглах нь чухал боллоо. Өгөгдлүүдийн зүй тогтол, хэв маяг болон шинжийг таамаглаж байгууллагад шийдвэр гаргахад туслах нь өгөгдөл олборлолтын үүрэг гэж ойлгож болно. Их хэмжээний өгөгдөл хоорондын холбоо хамаарлыг илрүүлдэг, өгөгдөл олборлолтын талаарх мэдлэгийн нэг чухал хэсэг, арга техник нь холбоо хамаарлын дүрэм юм. Холбоо хамаарлын дүрмийг илрүүлэхэд хэрэглэдэг олон аргуудаас Apriori алгоритмыг илүү өргөн хэрэглэдэг. Энэ судалгаагаар холбоо хамаарлын дүрмийг судлан ерөнхий ойлголтыг өгсөн. Түүнчлэн Apriori алгоритмыг ашиглан жижиглэн худалдааны дэлгүүрийн үйлчлүүлэгчдийн худалдан авалтын сагсан дахь барааны талаарх их өгөгдөл дотроос давтагдаж буй зүйлүүдийг хайж, улмаар бараа хоорондын хамаарлыг илрүүлж хамаарлын дүрмийг тодорхойлон гаргасан. Зах зээлийн сагсанд шинжилгээ хийх худалдан авч буй бүтээгдэхүүнд суурилан худалдан авагчийн сегментчилэл хийж дэлгүүрийн зохион байгуулалтыг төлөвлөх сурталчилгаа болон каталогийн дизайн гаргах гэхчилэн бизнесийн салбарт холбоо хамаарлыг илрүүлэх нь өргөн хэрэглээтэй байдаг. Холбоо хамаарлыг илрүүлэх олон төрлийн техник алгоритмууд байдаг бөгөөд энэ удаад apriori алгоритмыг ашиглан шинжилгээ хийнэ.

2 Холбоо хамаарлын дүрэм

  • Хэрэглэгчид ямар бүтээгдэхүүнийг худалдан авч байна вэ?
  • Хэрэглэгчид ямар бүтээгдэхүүнийг хамтад нь худалдан авч байна вэ?

Өгөгдөл олборлолтын хамгийн алдартай түгээмэл хэрэглэгддэг арга техник бол холбоо хамаарлын дүрмийг илрүүлэх юм. Холбоо хамаарлын дүрмийн гол зорилго нь гүйлгээний өгөгдлийн санд буй item-үүдийн олонлог дундаас холбоо хамаарлыг гаргаж ирэх юм. Apriori алгоритмыг ашиглан давтагдсан itemset-үүдийг олж жагсаан түүнээсээ холбоо хамаарлыг илрүүлдэг. Холбоо хамаарлын дүрмийг \(X \Rightarrow Y\) гэсэн хэлбэрээр илэрхийлдэг. Үүнд \(X\), \(Y\) нь өгөгдлийн сан дахь зүйлийн олонлог буюу бүтээгдэхүүнүүд жишээ нь,{компьютер => вирусны програм} юм. \(X \ нь \ нөхцөл \ (antecedent), \ Y \ нь \ үр \ дагавар(consequent)\) гэж нэрлэгддэг. Энэхүү илэрхийлэл нь \(Х\) бүтээгдэхүүнийг худалдаж авах нь \(Y\) бүтээгдэхүүнийг худалдан авахад хүргэнэ гэдгийг харуулдаг. Дараах хоёр алхмыг ашиглан холбоо хамаарлын аргаар дүрмүүд гарна. Үүнд:

  • Хамгийн бага support ашиглан түүнээс их эсвэл тэнцүү байх давталттай байгаа бүх зүйлийн олонлогуудыг (itemsets)–ийг олно.
  • Эдгээр тодорхойлсон давталттай зүйлүүдийн олонлогуудыг ашиглан урьдчилан тодорхойлсон босго утгаас дээш байх confidence (c)-тэй хүчтэй холбоо хамаарлын дүрмийг тодорхойлж гаргана. Хамгийн эхний алхам буюу давталттай бүх itemsets-ийг олоход apriori алгоритмыг ашиглана

\(I=\{i_1, i_2,..., i_k\}\) гэсэн элементүүдийн олонлогийг Items гэнэ.Item-үүдийн олонлог I нь супермаркетэд байгаа бүх бүтээгдэхүүний цуглуулга болон вэб сайтанд байгаа вэб хуудсуудын олонлог гэх мэт зүйлүүдээр илэрхийлэгдэнэ. \(T=\{t_1, t_2,..., t_n\}\) нь сонгосон гүйлгээний олонлог бөгөөд tids, T олонлогийг tidset гэж тэмдэглэе. Itemset болон tidset-ийг лексиграф жагсаалтын дагуу эрэмбэлэн хадгалдаг. Гүйлгээг хэлбэрээр дүрслэе. Энд tT нь тусгай гүйлгээ тодорхойлогч бөгөөд X нь Itemset юм. Гүйлгээний олонлог нь супермаркетийн бүх худалдан авагчдын олонлог болон вэб сайт уруу нийт зочилсон хүмүүсийн олонлог гэх мэт зүйлсээр илэрхийлэгдэнэ.

2.1 Support ба давтагдсан Itemset-үүд

Холбоо хамаарлын дүрэм нь \(support (s)\), \(confidence (c)\) гэсэн хоёр үндсэн хэмжигдэхүүнээр хэмжигдэнэ. Support нь тухайн item болон item-үүдийн олонлог нь нийт гүйлгээнд хэдэн удаа давтагдан орж байгааг илэрхийлнэ. \(I = x1,x2, ・・・,xm\) гэсэн элементүүдийн олонлогийг \(Items\) гэнэ. \(X \subseteq I\) олонлогийг \(Itemset\) гэнэ. Item-үүдийн олонлог \(I\) нь супермаркетэд байгаа бүх бүтээгдэхүүний цуглуулга болон вэб сайтанд байгаа вэб хуудсуудын олонлог гэх мэт зүйлүүдээр илэрхийлэгдэнэ. K тооны (эсвэл хэмжээтэй) Itemset-ийг k-itemset, k хэмжээтэй I дэд олонлог нь бүх k-itemset-үүдийн олонлогийг \(I^(k)\) гэж үзье. $ T = {t1, t2, ・・・, tn} $ нь сонгосон гүйлгээний олонлог бөгөөд tids, T олонлогийг tidset гэж тэмдэглэе. Itemset болон tidset-ийг жагсаалтын дагуу эрэмбэлэн хадгалдаг. Гүйлгээг \(<t,X>\) хэлбэрээр дүрслэе. Энд \(t \subseteq T\) нь тусгай гүйлгээ тодорхойлогч бөгөөд X нь Itemset юм. Гүйлгээний олонлог нь супермаркетийн бүх худалдан авагчдын олонлог болон вэб сайт уруу нийт зочилсон хүмүүсийн олонлог гэх мэт зүйлсээр илэрхийлэгдэнэ.Support нь дараах томьёогоор илэрхийлэгдэнэ

\[supp(X \Rightarrow Y)=\dfrac{|X \cup Y|}{n}\]

2.2 Confidence

Confidence нь нэг ажил гүйлгээнд X байвал Y-ийг мөн агуулах нөхцөлт магадлал юм.

\[conf(X \Rightarrow Y)=\dfrac{supp(X \cup Y)}{supp(X)}\]

2.3 Lift

Lift ratio = 1 гэсэн утгатай байвал X,Y хоорондоо хамааралгүй байна Lift ratio < 1 гэсэн утгатай байвал X,Y хоорондоо сөрөг хамааралтай байна Lift ratio > 1 гэсэн утгатай байвал X,Y хоорондоо эерэг хамааралтай байна

\[lift(X \Rightarrow Y)=\dfrac{supp(X \cup Y)}{supp(X)supp(Y) }\]

3 Apriori алгоритм

Энэхүү алгоритм нь өгөгдлийн санд давтагдсан item болон itemsets-ийг илрүүлж дараа нь холбоо хамаарлын дүрмийг тогтооход ашиглагддаг алгоритм юм. Алгоритмыг хоёр үе шаттайгаар гүйцэтгэнэ

  • Нэгдүгээрт өгөгдлийн санд байгаа min support-оос бага биш бүх давтагдсан itemset-үүдийг олно

  • Хоёрдугаарт нэгдүгээр үе шатаар үүссэн давтагдсан itemset-үүдээс min confidence-оос их байхыг хангасан холбоо хамаарлын дүрмүүдийг үүсгэнэ

3.1 Apriori алгоритм блок схем

3.2 Гүйлгээний өгөгдөл дээр apriori алгоритмыг ашиглах

3.3 Хайлтын мод/Apriori алгоритм/

4 Дата мэдээлэл

Энэхүү дата мэдээлэл нь Bakery-ийн гүйлгээний мэдээлэл бөгөөд нийт 21293 ширхэг гүйлгээний мэдээллийг агуулсан.Өгөгдлийг уншихдаа read.transactions функцийг ашиглав.

# Load libraries
library(dplyr)
library(arules)
library(arulesViz)
library(knitr)
library(gridExtra)
library(lubridate)
library(ggthemes)
library(plotly)
library(DT)
# Read the data
trans <- read.transactions("~/downloads/BreadBasket.csv", format="single", cols=c(3,4), sep=",", rm.duplicates=TRUE)

5 Дата мэдээлэлд шинжилгээ хийх

Хамгийн их борлуулалттай 20 бүтээгдэхүүнийг bar chart графикаар дүрслэн харуулав

p1<-data %>%
  group_by(Item) %>%
summarise(Count=n()) %>%
 arrange(desc(Count)) %>%
  slice(1:20) %>% # keep the top 10 items
  ggplot(aes(x=reorder(Item,Count),y=Count,fill=Item))+
  geom_bar(stat="identity")+
  coord_flip()+
  theme_bw()+
  ggtitle("Хамгийн их борлуулттай 20 бүтээгдэхүүн")+
  theme(legend.position="none")
ggplotly(p1)

Хамгийн их борлуулалт өндөртэй өдөр нь хагас сайн байгаа нь харагдаж байна

library(viridis)
p2<-data %>% 
  group_by(Date) %>% 
  summarise(Count= n()) %>% 
  mutate(Day=wday(Date,label=T)) %>% 
  ggplot(aes(x=Date,y=Count,fill=Day))+
  geom_bar(stat="identity")+
  ggtitle("Өдөрт зарсан бүтээгдэхүүн /сараар/")+
  scale_fill_viridis(discrete=TRUE)+
  theme_bw()
ggplotly(p2)
p3<-data %>% 
  mutate(Day = wday(Date,label=T)) %>% 
  group_by(Day) %>% 
  summarise(Count= n()) %>% 
  ggplot(aes(x=Day,y=Count,fill=Day))+
  theme_bw()+
  geom_bar(stat="identity")+
  ggtitle("Өдөрт зарсан нийт бүтээгдэхүүн")+
  theme(legend.position="none")
ggplotly(p3)
p4 <-data %>% 
  group_by(Date) %>% 
  summarise(Count= n()) %>% 
  arrange(desc(Count)) %>% 
  slice(1:50) %>% 
  mutate(wday = wday(Date,label=T)) %>% 
  ggplot(aes(x=wday,y=Count,fill=wday))+
  theme_bw()+
  geom_bar(stat="identity")+
  ggtitle("Шилдэг 50 борлуулалттай өдөр")+
  theme(legend.position="none")
ggplotly(p4)
library(plotly)
p5<-data%>%
  mutate(Hour = as.factor(hour(data$Time))) %>% 
  group_by(Hour) %>% 
  summarise(Count=n()) %>% 
  ggplot(aes(x=Hour,y=Count,fill=Hour))+
  theme_bw()+
  geom_bar(stat="identity")+
  ggtitle("Бүтээгдэхүүний борлуулалт цагаар")+
  theme(legend.position="none")
ggplotly(p5)

Бүтээгдэхүүний борлуултыг цагаар хистограмм болон тархалтын графикийг байгуулсан бөгөөд эндээс харахад хамгийн их борллулалттай цаг нь 11 цаг байна.

library(ggridges)
data %>% 
  mutate(Hour=as.factor(hour(Time)),
         Day=wday(Date,label=T)) %>% 
  group_by(Day,Hour,Transaction) %>% 
  summarise(Count=n()) %>% 
  ggplot(aes(x=Hour,y=Day,group=Day,fill=..density..))+
  theme_bw()+
  ggtitle("Бүтээгдэхүүний борлуулалтын  тархалт цагаар")+
  theme(legend.position="none")+
  geom_density_ridges_gradient(scale=2, rel_min_height=0.01)+
  scale_fill_viridis(option="magma")

# Load data 
trans_csv <- read.csv("~/downloads/BreadBasket.csv")

6 Apriori алгоритм

Энэхүү алгоритм нь өгөгдлийн санд давтагдсан item болон itemsets-ийг илрүүлж дараа нь холбоо хамаарлын дүрмийг тогтооход ашиглагддаг алгоритм юм. Алгоритмыг хоёр үе шаттайгаар гүйцэтгэнэ

  • Нэгдүгээрт өгөгдлийн санд байгаа min support-оос бага биш бүх давтагдсан itemset-үүдийг олно.

*Хоёрдугаарт нэгдүгээр үе шатаар үүссэн давтагдсан itemset-үүдээс min confidence-оос их байхыг хангасан холбоо хамаарлын дүрмүүдийг үүсгэнэ

\(Support\) нь 10%, 5%, 1% ,0.5% үеүүдэд холбоо хамаарлын хэдэн дүрэм үүсч байгааг графикаар харуулья

  • Support 10% үед Бид маш цөөхөн холбоо хамаарлын дүрмүүрдийг илрүүлж байгааг графикаас харж болно

  • Support 1% үед . Бид confidence 50% дээш 13 дүрмийг илрүүлж байна

  • Support 0.5% үед .Маш олон тооны дүрмүүд илэрч байна

6.1 Apriori алгоритм ашиглан холбоо хамаарлын дүрмүүдийг илрүүлэх

Apriori алгоритмыг ашиглан min.support=1% болон min.confidence=50% байхаар холбоо хамаарлын дүрмүүдийг ольё

rules_sup1_conf50 <- apriori(trans, parameter=list(sup=supportLevels[3], 
                             conf=confidenceLevels[5], target="rules"))

6.1.1 Холбоо хамаарлын дүрмүүд

# Association rules
inspect(rules_sup1_conf50)
##      lhs                 rhs      support    confidence lift     count
## [1]  {Tiffin}         => {Coffee} 0.01058361 0.5468750  1.134577  70  
## [2]  {Spanish Brunch} => {Coffee} 0.01406108 0.6326531  1.312537  93  
## [3]  {Scone}          => {Coffee} 0.01844572 0.5422222  1.124924 122  
## [4]  {Toast}          => {Coffee} 0.02570305 0.7296137  1.513697 170  
## [5]  {Alfajores}      => {Coffee} 0.02237678 0.5522388  1.145705 148  
## [6]  {Juice}          => {Coffee} 0.02131842 0.5300752  1.099723 141  
## [7]  {Hot chocolate}  => {Coffee} 0.02721500 0.5263158  1.091924 180  
## [8]  {Medialuna}      => {Coffee} 0.03296039 0.5751979  1.193337 218  
## [9]  {Cookies}        => {Coffee} 0.02978530 0.5267380  1.092800 197  
## [10] {NONE}           => {Coffee} 0.04172966 0.5810526  1.205484 276  
## [11] {Sandwich}       => {Coffee} 0.04233444 0.5679513  1.178303 280  
## [12] {Pastry}         => {Coffee} 0.04868461 0.5590278  1.159790 322  
## [13] {Cake}           => {Coffee} 0.05654672 0.5389049  1.118042 374

Бид эдгээр дүрмийг хэрхэн тайлбарлах вэ?

  • Medialuna худалдан авсан хэрэглэгчид coffee авах магадлал 53% байна.
  • Spanish болон brunch худалдан авсан хэрэглэгчид cofee авах магадлал 63% байна
  • toast худалдан авсан хэрэглэгчид coffee хамтад нь авах магадлал 73% байна.

6.2 Холбоо хамаарлын дүрмүүдийг графикаар харуулав

6.2.1 График 1:Скаттер график

plot(rules_sup1_conf50, measure=c("support","lift"), shading="confidence")

6.2.2 График 2

plot(rules_sup1_conf50, method="graph")

6.2.3 График 3

plot(rules_sup1_conf50, method="graph", control=list(layout=igraph::in_circle()))

6.2.4 График 4

plot(rules_sup1_conf50, method="grouped")