Frequent Pattern Mining (Sık Kalıp Madenciliği)

Sık Kalıp Madenciliği, büyük veri kümelerinde birlikte sıklıkla görülen öğe gruplarını keşfeden; birliktelik kurallarının, öneri sistemlerinin ve anomali tespitinin temelini oluşturan veri madenciliği tekniğidir.

Sık Kalıp Madenciliği (Frequent Pattern Mining), büyük veri kümelerinde birlikte sıklıkla ortaya çıkan öğe gruplarını, dizisel kalıpları veya yapısal örüntüleri belirlemeyi hedefleyen temel bir veri madenciliği tekniğidir. "Sık" (frequent) kavramı, bir kalıbın belirli bir minimum destek eşiğini (minimum support threshold) aşması anlamına gelir; yani o kalıbın, tüm işlemlerin (transaction) en az belirlenen yüzdesinde bulunması gerekir. En yaygın kullanım senaryosu birliktelik kuralı madenciliğidir (association rule mining). Süpermarket sepet analizinde "ekmek alan müşteri yüzde seksen olasılıkla tereyağı da alır" türünden kurallar bu yöntemle keşfedilir. Amazon ve Netflix'in öneri sistemleri, kredi kartı dolandırıcılık tespiti ve ağ güvenliği anomali analizi de sık kalıp madenciliğini yoğun biçimde kullanır. Alandaki ilk ve en yaygın algoritma, 1994'te Agrawal ve Srikant tarafından önerilen Apriori'dir. Aday öğe seti üretimi ve budama (candidate generation and pruning) prensibiyle çalışır; her adımda veritabanını yeniden tarar. Bu tarama maliyeti büyük veri setlerinde belirgin bir darboğaz oluşturduğundan, 2000 yılında Jiawei Han ve arkadaşları FP-Growth (Frequent Pattern Growth) algoritmasını geliştirdi. FP-Growth, veriyi kompakt bir FP-Tree yapısına sıkıştırır ve tekrarlı veritabanı taramasını ortadan kaldırarak genellikle Apriori'den 10 ila 100 kat daha hızlı çalışır. Günümüzde sık kalıp madenciliği yalnızca kural keşfiyle sınırlı değildir; özellik mühendisliğinde anlamlı özellik kombinasyonlarını bulmak için denetimsiz ön analiz adımı olarak da kullanılır. Python'da mlxtend kütüphanesi apriori() ve fpgrowth() fonksiyonlarıyla, Apache Spark'ta ise MLlib'in FPGrowth modülüyle ölçeklenebilir uygulamalar hayata geçirilebilir. Minimum destek ve minimum güven (confidence) eşiklerinin veri setine özgü biçimde ayarlanması, anlamlı ve uygulanabilir kurallar elde etmenin anahtarıdır.

search Sık Kalıp Madenciliği Nedir ve Neden Önemlidir?

Sık Kalıp Madenciliği, bir veri tabanındaki işlem kayıtlarında (örn. alışveriş sepetleri, tıklama akışları, hasta geçmişleri) birlikte sık görülen öğe kombinasyonlarını otomatik olarak keşfeder. Temel fikir şudur: milyonlarca işlem içinde belirli bir eşiğin üzerinde birlikte geçen öğeler, verinin altındaki gizli yapıyı yansıtır ve bu yapı iş kararlarını yönlendirmek için kullanılabilir. Üç temel ölçüt kalıpların değerini belirler. Destek (support), bir kalıbın tüm işlemler içindeki görülme oranıdır. Güven (confidence), A → B kuralında A geçen işlemlerin ne kadarında B'nin de geçtiğini gösterir. Lift, A ve B'nin bağımsız rastlantısana kıyasla birlikte görülme oranını ölçer; 1'den büyük lift, anlamlı pozitif ilişkiye işaret eder. Perakende sektöründe bu üç ölçütle çıkarılan kurallar raf düzenlemesinden kişiselleştirilmiş teklife kadar geniş bir uygulama yelpazesini kapsar.

Temel Algoritmalar: Apriori vs FP-Growth

sort Apriori (1994)

Aday öğe seti üretme ve budama döngüsüyle çalışır. Her adımda veritabanını tarar. Anlaşılır ve uygulaması kolaydır; ancak büyük veri setlerinde tekrarlı I/O maliyeti nedeniyle yavaşlar.

bolt FP-Growth (2000)

Veriyi kompakt FP-Tree yapısına sıkıştırır; veritabanını yalnızca iki kez tarar. Apriori'ye göre 10-100× daha hızlıdır. Büyük veri setleri ve dağıtık ortamlar (Spark MLlib) için tercih edilir.

analytics Temel Kavramlar: Destek, Güven, Lift

  • check_circle Destek (Support): Bir öğe setinin tüm işlemler içinde görülme sıklığı. Örneğin 1.000 işlemden 150'sinde hem ekmek hem tereyağı varsa destek = %15. Minimum destek eşiği, nadir kalıpları elemek için kullanılır.
  • check_circle Güven (Confidence): A → B kuralında, A içeren işlemler arasında B'nin de bulunma oranı. Güven = destek(A∪B) / destek(A). Yüksek güven, kuralın güvenilirliğini artırır; ancak lift olmadan yanıltıcı olabilir.
  • check_circle Lift: Lift = güven(A→B) / destek(B). 1'den büyükse A ve B pozitif ilişkilidir; 1 ise bağımsızdır; 1'den küçükse negatif ilişki (A olunca B azalır) söz konusudur. Kaliteli kural seçimi için en kritik metriktir.
  • check_circle Minimum Destek Eşiği (min_support): Algoritmanın hangi kalıpları dikkate alacağını belirleyen eşik değeri. Çok düşük ayarlanırsa milyonlarca önemsiz kural üretilir; çok yüksek ayarlanırsa anlamlı nadir kalıplar kaybolur.
  • check_circle Kapalı ve Maksimal Sık Kalıplar: Tüm sık kalıpları saklamak yerine kapalı (closed) veya maksimal (maximal) kalıplar çıkarılarak depolama ve hesaplama maliyeti azaltılır. Kapalı kalıplar bilgi kaybı olmadan tam kümeyi temsil eder.

apps Uygulama Alanları

  • check_circle Pazar Sepet Analizi: Süpermarket ve e-ticaret platformlarında birlikte satın alınan ürünlerin keşfi; çapraz satış stratejileri, raf düzeni optimizasyonu ve kampanya tasarımı için kullanılır.
  • check_circle Öneri Sistemleri: Amazon'un "bu ürünü alanlar şunları da aldı" özelliği sık kalıp madenciliğiyle beslenir. Netflix ve Spotify'da içerik-kümeleme ön adımı olarak da uygulanır.
  • check_circle Dolandırıcılık ve Anomali Tespiti: Kredi kartı işlemlerinde alışılmadık harcama kalıpları veya ağ trafiğinde anormal bağlantı kombinasyonlarının saptanmasında sık kalıp madenciliği kritik bir rol üstlenir.
  • check_circle Tıbbi Veri Madenciliği: Hasta semptomları, teşhisler ve ilaç kombinasyonları arasındaki birlikteliklerin keşfi; ilaç yan etkisi araştırmaları ve klinik karar destek sistemlerinde kullanılır.

code Python'da Kullanım: mlxtend ile FP-Growth

  • check_circle mlxtend Kurulumu ve Veri Hazırlığı: pip install mlxtend komutuyla kurulur. İşlem verisi (transaction list) TransactionEncoder ile one-hot matrise dönüştürülür; her satır bir işlem, her sütun bir ürün/öğeyi temsil eder.
  • check_circle fpgrowth() ile Sık Kalıpların Çıkarılması: from mlxtend.frequent_patterns import fpgrowth; frequent_itemsets = fpgrowth(df, min_support=0.05, use_colnames=True). min_support parametresi 0-1 arasında oransal veya tam sayı olarak verilebilir.
  • check_circle association_rules() ile Kural Üretimi: from mlxtend.frequent_patterns import association_rules; rules = association_rules(frequent_itemsets, metric='lift', min_threshold=1.2). Elde edilen DataFrame antecedents, consequents, support, confidence ve lift sütunlarını içerir.
  • check_circle Apache Spark MLlib ile Ölçeklendirme: Milyonlarca işlem için from pyspark.ml.fpm import FPGrowth; model = FPGrowth(itemsCol='items', minSupport=0.01, minConfidence=0.3). Dağıtık FP-Growth implementasyonu büyük veri altyapılarında native çalışır.

quiz Sık Sorulan Sorular

  • check_circle Sık kalıp madenciliği ile kümeleme arasındaki fark nedir?: Kümeleme benzer öğeleri ya da işlemleri gruplarken, sık kalıp madenciliği belirli öğelerin birlikte görülme örüntülerini arar. Kümeleme satır-tabanlı; kalıp madenciliği sütun kombinasyonuna odaklıdır.
  • check_circle Minimum destek eşiğini nasıl seçmeliyim?: Veri setinin boyutuna ve iş bağlamına göre değişir. Genellikle %1-5 civarında başlanarak üretilen kural sayısı izlenir; çok az kural çıkıyorsa eşik düşürülür, çok fazla anlamsız kural varsa yükseltilir.
  • check_circle Apriori ve FP-Growth arasında hangisini tercih etmeliyim?: Küçük veri setleri (< 10 K işlem) için Apriori'nin anlaşılırlığı yeterlidir. Büyük veri setlerinde FP-Growth belirgin şekilde daha hızlıdır. Spark ortamında doğrudan MLlib FPGrowth tercih edilmelidir.
  • check_circle Güven yüksek ama lift 1'e eşitse kural anlamlı mıdır?: Hayır. Lift = 1 ise A ve B bağımsızdır; A'nın varlığı B'nin olasılığını artırmaz. Yüksek güven fakat lift ≈ 1 olan kurallar, B'nin zaten çok sık görüldüğünü gösterir ve genellikle uygulanabilir değildir.
  • check_circle Sık kalıp madenciliği gerçek zamanlı sistemlerde çalışabilir mi?: Geleneksel Apriori ve FP-Growth toplu (batch) işlem için tasarlanmıştır. Gerçek zamanlı kullanım için Lossy Counting ve SWIM gibi akış tabanlı sık kalıp algoritmaları veya Kafka + Spark Streaming entegrasyonu gerekir.