Өдөр бүр байгууллага аж ахуй нэгж дээр асар их хэмжээний өгөгдөл үүсч байна. Бид өөрсдөө ч мэдэлгүй өөрсөдтэйгээ холбоотой их өгөгдлийг үүсгэдэг болов. Гэтэл энэ их өгөгдлийг боловсруулж шинжлэх нь улам хүндрэлтэй болж байна. Иймд өгөгдөл олборлолтонд анхаарал хандуулж түүнийг ашиглах нь чухал боллоо. Өгөгдлүүдийн зүй тогтол, хэв маяг болон шинжийг таамаглаж байгууллагад шийдвэр гаргахад туслах нь өгөгдөл олборлолтын үүрэг гэж ойлгож болно. Их хэмжээний өгөгдөл хоорондын холбоо хамаарлыг илрүүлдэг, өгөгдөл олборлолтын талаарх мэдлэгийн нэг чухал хэсэг, арга техник нь холбоо хамаарлын дүрэм юм. Холбоо хамаарлын дүрмийг илрүүлэхэд хэрэглэдэг олон аргуудаас Apriori алгоритмыг илүү өргөн хэрэглэдэг. Энэ судалгаагаар холбоо хамаарлын дүрмийг судлан ерөнхий ойлголтыг өгсөн. Түүнчлэн Apriori алгоритмыг ашиглан жижиглэн худалдааны дэлгүүрийн үйлчлүүлэгчдийн худалдан авалтын сагсан дахь барааны талаарх их өгөгдөл дотроос давтагдаж буй зүйлүүдийг хайж, улмаар бараа хоорондын хамаарлыг илрүүлж хамаарлын дүрмийг тодорхойлон гаргасан. Зах зээлийн сагсанд шинжилгээ хийх худалдан авч буй бүтээгдэхүүнд суурилан худалдан авагчийн сегментчилэл хийж дэлгүүрийн зохион байгуулалтыг төлөвлөх сурталчилгаа болон каталогийн дизайн гаргах гэхчилэн бизнесийн салбарт холбоо хамаарлыг илрүүлэх нь өргөн хэрэглээтэй байдаг. Холбоо хамаарлыг илрүүлэх олон төрлийн техник алгоритмууд байдаг бөгөөд энэ удаад apriori алгоритмыг ашиглан шинжилгээ хийнэ.
Өгөгдөл олборлолтын хамгийн алдартай түгээмэл хэрэглэгддэг арга техник бол холбоо хамаарлын дүрмийг илрүүлэх юм. Холбоо хамаарлын дүрмийн гол зорилго нь гүйлгээний өгөгдлийн санд буй item-үүдийн олонлог дундаас холбоо хамаарлыг гаргаж ирэх юм. Apriori алгоритмыг ашиглан давтагдсан itemset-үүдийг олж жагсаан түүнээсээ холбоо хамаарлыг илрүүлдэг. Холбоо хамаарлын дүрмийг \(X \Rightarrow Y\) гэсэн хэлбэрээр илэрхийлдэг. Үүнд \(X\), \(Y\) нь өгөгдлийн сан дахь зүйлийн олонлог буюу бүтээгдэхүүнүүд жишээ нь,{компьютер => вирусны програм} юм. \(X \ нь \ нөхцөл \ (antecedent), \ Y \ нь \ үр \ дагавар(consequent)\) гэж нэрлэгддэг. Энэхүү илэрхийлэл нь \(Х\) бүтээгдэхүүнийг худалдаж авах нь \(Y\) бүтээгдэхүүнийг худалдан авахад хүргэнэ гэдгийг харуулдаг. Дараах хоёр алхмыг ашиглан холбоо хамаарлын аргаар дүрмүүд гарна. Үүнд:
\(I=\{i_1, i_2,..., i_k\}\) гэсэн элементүүдийн олонлогийг Items гэнэ.Item-үүдийн олонлог I нь супермаркетэд байгаа бүх бүтээгдэхүүний цуглуулга болон вэб сайтанд байгаа вэб хуудсуудын олонлог гэх мэт зүйлүүдээр илэрхийлэгдэнэ. \(T=\{t_1, t_2,..., t_n\}\) нь сонгосон гүйлгээний олонлог бөгөөд tids, T олонлогийг tidset гэж тэмдэглэе. Itemset болон tidset-ийг лексиграф жагсаалтын дагуу эрэмбэлэн хадгалдаг. Гүйлгээг
Холбоо хамаарлын дүрэм нь \(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}\]
Confidence нь нэг ажил гүйлгээнд X байвал Y-ийг мөн агуулах нөхцөлт магадлал юм.
\[conf(X \Rightarrow Y)=\dfrac{supp(X \cup Y)}{supp(X)}\]
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) }\]
Энэхүү алгоритм нь өгөгдлийн санд давтагдсан item болон itemsets-ийг илрүүлж дараа нь холбоо хамаарлын дүрмийг тогтооход ашиглагддаг алгоритм юм. Алгоритмыг хоёр үе шаттайгаар гүйцэтгэнэ
Нэгдүгээрт өгөгдлийн санд байгаа min support-оос бага биш бүх давтагдсан itemset-үүдийг олно
Хоёрдугаарт нэгдүгээр үе шатаар үүссэн давтагдсан itemset-үүдээс min confidence-оос их байхыг хангасан холбоо хамаарлын дүрмүүдийг үүсгэнэ
Энэхүү дата мэдээлэл нь 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)Хамгийн их борлуулалттай 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)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")Энэхүү алгоритм нь өгөгдлийн санд давтагдсан item болон itemsets-ийг илрүүлж дараа нь холбоо хамаарлын дүрмийг тогтооход ашиглагддаг алгоритм юм. Алгоритмыг хоёр үе шаттайгаар гүйцэтгэнэ
*Хоёрдугаарт нэгдүгээр үе шатаар үүссэн давтагдсан itemset-үүдээс min confidence-оос их байхыг хангасан холбоо хамаарлын дүрмүүдийг үүсгэнэ
\(Support\) нь 10%, 5%, 1% ,0.5% үеүүдэд холбоо хамаарлын хэдэн дүрэм үүсч байгааг графикаар харуулья
Support 10% үед Бид маш цөөхөн холбоо хамаарлын дүрмүүрдийг илрүүлж байгааг графикаас харж болно
Support 1% үед . Бид confidence 50% дээш 13 дүрмийг илрүүлж байна
Support 0.5% үед .Маш олон тооны дүрмүүд илэрч байна
Apriori алгоритмыг ашиглан min.support=1% болон min.confidence=50% байхаар холбоо хамаарлын дүрмүүдийг ольё
rules_sup1_conf50 <- apriori(trans, parameter=list(sup=supportLevels[3],
conf=confidenceLevels[5], target="rules"))# 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
Бид эдгээр дүрмийг хэрхэн тайлбарлах вэ?
plot(rules_sup1_conf50, measure=c("support","lift"), shading="confidence")plot(rules_sup1_conf50, method="graph")plot(rules_sup1_conf50, method="graph", control=list(layout=igraph::in_circle()))plot(rules_sup1_conf50, method="grouped")