- def generate_association_rules(transactions, min_confidence=0.6):
- item_counts = {}
- support_threshold = len(transactions) * 0.5 # Minimum support threshold
- # Counting item occurrences
- for transaction in transactions:
- for item in set(transaction):
- item_counts[item] = item_counts.get(item, 0) + 1
- frequent_items = {item for item, count in item_counts.items() if count >= support_threshold}
- # Generating association rules
- rules = []
- for itemset in powerset(frequent_items):
- if len(itemset) > 1:
- for item in itemset:
- antecedent = frozenset(itemset - {item})
- consequent = frozenset({item})
- support_itemset = calculate_support(itemset, transactions)
- support_antecedent = calculate_support(antecedent, transactions)
- confidence = support_itemset / support_antecedent
- if confidence >= min_confidence:
- rules.append((antecedent, consequent, confidence))
- return rules
- def powerset(s):
- result = [[]]
- for elem in s:
- result.extend([subset + [elem] for subset in result])
- return [frozenset(subset) for subset in result]
- def calculate_support(itemset, transactions):
- count = 0
- for transaction in transactions:
- if itemset.issubset(transaction):
- count += 1
- return count / len(transactions)
- # Example transactions
- transactions = [
- [1, 3, 4],
- [2, 3, 5],
- [1, 2, 3, 5],
- [2, 5],
- [1, 3, 5]
- ]
- # Generating association rules with a confidence of 60%
- rules = generate_association_rules(transactions, min_confidence=0.6)
- # Displaying the association rules
- for rule in rules:
- print(f"Rule: {rule[0]} -> {rule[1]}, Confidence: {rule[2]}")