Skip to content

Instantly share code, notes, and snippets.

@oskar-j
Created April 7, 2015 20:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oskar-j/ee5c0618cb99e492e0b3 to your computer and use it in GitHub Desktop.
Save oskar-j/ee5c0618cb99e492e0b3 to your computer and use it in GitHub Desktop.
Belgian shopping basket and association rules
transactions = {{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Hoegaarden'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch'};
{'Pampers','Dommelsch','Hoegaarden'};
};
items = unique([transactions{:}]);
T = zeros(size(transactions,1), length(items));
for i = 1:size(transactions,1)
T(i,ismember(items,transactions{i,:})) = 1;
end
# disp(array2table(T,'VariableNames',items,'RowNames',{'T1','T2','T3'}))
# unfortunaly there is no array2table funciton in octave
itemset = {'Pampers','Dommelsch'}
% get col indices of items in itemset
cols = ismember(items,itemset);
N = size(T,1); fprintf('Number of transactions = %d\n',N)
% count rows that include all items
supportCount = sum(all(T(:,cols),2));
fprintf('Support count for this itemset = %d\n',supportCount)
itemSetSupport = supportCount/size(T,1);
fprintf('Support = %.2f\n',itemSetSupport)
ante = {'Pampers'}; % pick some subset itemset as |ante|
% get items not in |ante|
conseq = setdiff(itemset,ante);
fprintf('Itemset: {%s, %s, %s}\n', itemset{:})
fprintf('Ante : {%s, %s}\n',ante{:})
fprintf('Conseq : {%s}\n',conseq{:})
fprintf('Rule : {%s, %s} => {%s}\n', ante{:},conseq{:})
cols = ismember(items,ante);
anteCount = sum(all(T(:,cols),2));
fprintf('Support Count for Ante = %d\n',anteCount)
anteSupport = anteCount/N;
fprintf('Support for Ante = %.2f\n',anteSupport)
confidence = itemSetSupport/anteSupport;
fprintf('Confidence = %.2f (= itemset support / ante support)\n',confidence)
cols = ismember(items,conseq);
conseqCount = sum(all(T(:,cols),2));
fprintf('Support Count for Conseq = %d\n',conseqCount)
conseqSupport = conseqCount/N;
fprintf('Support for Conseq = %.2f\n',conseqSupport)
lift = itemSetSupport/(anteSupport*conseqSupport);
fprintf('Lift = %.2f (= itemset support / (ante support x conseq support))\n',lift)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment