Market Basket Analysis is one of the key techniques used by large retailers to uncover associations between items. It works by looking for combinations of items that occur together frequently in transactions. To put it another way, it allows retailers to identify relationships between the items that people buy.
Association Rules are widely used to analyze retail basket or transaction data, and are intended to identify strong rules discovered in transaction data using measures of interestingness, based on the concept of strong rules.
7. Market Basket Analysis
6
بههمینمنظوریکنمونهازکشفقواعدانجمنیبررویدادههاییکشرکتدارایسیستمفروشفروشگاهی
انجامشد.
بهعلتواقعیبودندادههاازذکرکدکاالوعنوانکاالخودداریمیشود.
پایگاهدادهشرکت این فروشگاهی فروش افزار نرمSQLمیباشدولیتجزیهوتحلیلاطالعاتباابزارتخصصی
18
Rapidminerانجاممیشود.اینتجزیهوتحلیلهاقابلیتانجامازطریقSQLراداردامابهعلتتخصصی
نبودن،دارایمحدودیتهاوکندیهایزیادیمیباشدداده پایگاه این های نسخه جدیدترین در حتی که19
همانند نویسی برنامه های زبان از کمک بدونR.نمود پیدا دست نظر مورد نتیجه به توان می سختی بهبهعنوان
نمونهدرتشکیلماتریسوابستگیبهعلتمحدودیت4۰96ستونیدرهرخروجیاسکریپتهادرTSQL،
تشکیلچنینجدولیدرصورتزیادبودناطالعاتامکانپذیرنمیباشدواینجدولبایدباابزاردیگریساخته
شود.
درگاماولابتدااطالعاتراازجداولمربوطبهفروشگاهیخارجمیکنیمودرجدولدیگریقرارمیدهیم.دراین
موردبهعلتنیاز،بررسی مورد شرکتصرفااطالعاتسالهای2۰15بهبعدموردنیازبودهاست:
if object_id ('dbo.DM','u')is not null drop table dbo.DM
GO
select InvoiceRef,PartRef
into dbo.DM
from pos.PosInvoiceItm
where InvoiceRef in (
select InvoiceId from pos.posinvoice
where datepart(year,date) >=2015)
GO
18
علتانتخاباینابزارتصویریبودنآنوسادگیدرکارکردوعدمنیازبهدانشبرنامهنویسیمیباشددرغیراینصورتمیتواناز
ابزارهایدیگرینیزاستفادهنمود
19
DataBase
8. Market Basket Analysis
7
برایمرتبکردندادههاهمانطورکهازمفاهیمدادههامشخصاستمانیازیبهفاکتورهایباتکردیفنداریم
چونتعدادخریدیککاالدرنتیجهماموثرنیستوصرفاکنارهمقرارگرفتنکاالهابرایمابااهمیتاست:
with CTE_RemoveOnePart AS (
SELECT InvoiceRef, COUNT(Partref) AS Cnt
FROM dbo.DM
GROUP BY InvoiceRef
HAVING (COUNT(Partref) = 1))
delete dbo.DM
where InvoiceRef in (
select InvoiceRef from CTE_RemoveOnePart)
GO
بهعنواندادههایپرت2۰
دراینمفهومکاالهاییکهدراینبازهزمانیصرفایکبارفروختهشدهاندقواعدمناسبی
راارائهنمیدهندچوناحتمالتصادفیبودنآنخریدبسیارباالمیباشد.بهاینمنظوربادستورزیراینمواردرا
حذفمیکنیم:
With CTE_RemoveOnlyOneFrequence AS (
select PartRef,count(PartRef) Cntr from dbo.DM
group by PartRef
having count(PartRef)<10)
delete dbo.DM
where PartRef in (select PartRef from
CTE_RemoveOnlyOneFrequence)
Go
پسازاینفراهمسازیوپیشپردازشدادههانیازبهجدولیداریمکهدرآنستونهاعنوانکاالباشندودر
سطرهابهازایهرفاکتورفروشمشخصنمایدکهچهکاالهاییوجودداشتهاند.مقادیرموجودازنوعباینری
20
Outlier
9. Market Basket Analysis
8
میباشندزیرامقداراشارهبهوجودویاعدموجودکاالدرفاکتورمربوطهداردواینمقادیرباینریازنوعباینری
متقارنمیباشند.
برایتشکیلچنینماتریسیازدستورزیراستفادهمینماییم:
/*****Create PivoteTable*****/
DECLARE @COL NVARCHAR(MAX) ='',@SQL NVARCHAR(MAX) =''
DECLARE @COL2 NVARCHAR(MAX) =''
SELECT @COL+= ','+QUOTENAME(Partref)FROM
(
select distinct Partref from dbo.DM
) AS D
SELECT @COL2+= ', isnull ('+QUOTENAME(Partref)+' , 0)'+ ' As '+QUOTENAME(Partref) FROM
(
select distinct Partref
from dbo.DM) AS D
SELECT @COL= SUBSTRING (@COL,2,LEN(@COL)-1)
SELECT @COL2= SUBSTRING (@COL2,2,LEN(@COL2)-1)
SELECT @SQL= 'SELECT InvoiceRef, '+ @COL2 +'
FROM (
select InvoiceRef, Partref from dbo.DM
) AS J
PIVOT
(
Count (Partref) FOR Partref IN ('+ @COL +'
)) AS P '
exec sp_executesql @sql
نکته:درصورتیکهتعدادکاالهابیشاز4۰96عددباشدنمیتواناینخروجیراازSQLتهیهنمودوبایدبا
ابزارهایدیگریهماننداکسل(درصورتتواناییپردازشحجمبسیارزیاداطالعات)!!!باتوجهبهمفهومذکر
شده،ایجادنمود.
خروجیایجادشدهرادریکفایلاکسلیاCSVقرارمیدهیمکهدراینموردبهعلتزیادبودندادههاآنرا
درفایلCSVقراردادیم.
درخروجیاطالعاتماتریسدارایحجم1۰718176دیتامیباشد: