# Apriori Algorithm

Today we are going to learn about Apriori Algorithm. Before we start with that we need to know a little bit about Data Mining.

What is Data Mining ?

Data Mining is a non-trivial process of identifying valid, novel, potentially useful and ultimately understandable patterns in data.

Apriori Algorithm is concerned with Data Mining and it helps us to predict information based on previous data.

In many e-commerce websites we see a recently bought together feature or the suggestion feature after purchasing or searching for a particular item, these suggestions are based on previous purchase of that item and Apriori Algorithm can be used to make such suggestions.

Before we start with Apriori we need to understand a few simple terms :

Association Mining: It is finding different association in our data.

For E.g. If you are buying butter then there is a great chance that you will buy bread too so there is an association between bread and butter here.

Support: It specifies how many of the total transactions contain these items.

Support(A->B) denotes how many transactions have all items from AUB

Therefore

• Support(A->B) = P(AUB)
• Support(A->B) = support(B->A)

Therefore 10% support will mean that 10% of all the transactions contain all the items in AUB.

Confidence: For a transaction A->B Confidence is the number of time B is occuring when A has occurred.

Note that Confidence of A->B will be different than confidence of B->A.

Confidence(A->B) = P(AUB)/P(A).

Support_Count(A): The number of transactions in which A appears.

An itemset having number of items greater than support count is said to be frequent itemset.

Apriori algorithm is used to find frequent itemset in a database of different transactions with some minimal support count. Apriori algorithm prior knowledge to do the same, therefore the name Apriori. It states that

All subsets of a frequent itemset must be frequent.

If an itemset is infrequent, all its supersets will be infrequent.

Let’s go through an example :

 Transaction ID Items 1 I1 I3 I4 2 I2 I3 I5 3 I1 I2 I3 I5 4 I2 I5

We will first find Candidate set (denoted by Ci) which is the count of that item in Transactions.

C1:

 Items Support Count I1 2 I2 3 I3 3 I4 1 I5 3

The items whose support count is greater than or equal to a particular min support count are included in L set

Let’s say support count for above problem be 2

L1:

 Items Support Count I1 2 I2 3 I3 3 I5 3

Next is the joining step we will combine the different element in L1 in order to form C2 which is candidate of size 2 then again we will go through the database and find the count of transactions having all the items. We will continue this process till we find a L set having no elements.

C2:

 Items Support Count I1,I2 1 I1,I3 2 I1,I5 1 I2,I3 2 I2,I5 3 I3,I5 2

We will remove sets which have count less than min support count and form L2

L2:

 Items Support Count I1,I3 2 I2,I3 2 I2,I5 3 I3,I5 2

Now we will join L2 to form C3

Note that we cannot combine {I1,I3} and {I2,I5} because then the set will contain 4 elements. The rule here is the there should be only one element in both set which are distinct all other elements should be the same.

C3:

 Items Support Count I1,I2,I3 1 I1,I3,I5 1 I2,I3,I5 2

L3:

 Item Support Count I2,I3,I5 2

Now we cannot form C4 therefore the algorithm will terminate here.

Now we have to calculate the strong association rules. The rules having a minimum confidence are said to be strong association rules.

Suppose for this example the minimum confidence be  75%.

There can be three candidates for strong association rules.

I2^I3->I5 = support(I2^I3)/support(I5) = ⅔  = 66.66%

I3^I5->I2 = support(I3^I5)/support(I2) = ⅔ = 66.66%

I2^I5->I3 = support(I2^I5)/support(I3) = 3/3 = 100%

So in this example the strong association rule is

I2^I5->I3.

So from the above example we can draw conclusion that if someone is buying I2 and I5 then he/she is most likely to buy I3 too. This is used to make suggestions while we are purchasing online.

The Algorithm to calculate the frequent itemset is as below:

```Ck : Candidate Set of size k
Lk : Frequent set of size k
min_sup : Minimum support count
T : Database

For all transactions t in T :
do
Go through the items in t
If item already present in set C1 then increase count
else insert item in C1 with count 1
end

For all items I in C
do
If count of I > min_sup
L1 ← Item in C1
end

for(k=1 ; Lk!=ɸ ; k++)
do
Ck+1 ← Candidates generated from Lk

for all transactions t in T
do
if Ck+1 a subset of t
increase count of Ck+1
end

For all items I in C
do
If count of I > min_sup
Lk+1 ← Item in Ck
end
end```

Comment down below if you have any queries related to Apriori Algorithm.