Projelere Dön
Veri Bilimi

Armut ARL Tabanlı Öneri Sistemi

Armut platformunun verilerini kullanarak Birliktelik Kuralları (Association Rule Learning) tabanlı bir öneri sistemi geliştirdim. Kullanıcıların aldıkları hizmetleri analiz ederek, gelecekte hangi hizmetleri alma eğiliminde olduklarını tahmin eden ve bu doğrultuda yeni hizmetler öneren bir sistem tasarladım.

PythonPandasMLxtendApriori AlgoritmasıAssociation Rule LearningVeri Analizi
Armut ARL Tabanlı Öneri Sistemi

Armut ARL (Association Rule Learning) Tabanlı Öneri Sistemi

Bu projede, Armut platformunun (temizlik, nakliyat, tadilat vb. hizmetleri birkaç dokunuşla müşteriye ulaştıran bir çevrimiçi hizmet sağlayıcı) verilerini kullanarak Birliktelik Kuralları (Association Rule Learning) tabanlı bir öneri sistemi geliştirilmiştir. Kullanıcıların aldıkları hizmetleri analiz ederek, gelecekte hangi hizmetleri alma eğiliminde olduklarını tahmin etmek ve bu doğrultuda onlara yeni hizmetler önermek amaçlanmıştır.

Proje Amacı

  • Öncelik: Birlikte alınma olasılığı yüksek olan hizmetleri tespit ederek kullanıcı deneyimini iyileştirmek, çapraz satış fırsatlarını artırmak.
  • Fayda: Hizmet sağlayıcıların, potansiyel olarak alınabilecek diğer hizmetleri doğru kullanıcı segmentlerine önermesi sayesinde, gelir artışı ve müşteri memnuniyetinde yükselme beklenir.

Veri Seti

  • Kaynak: armut_data.csv
  • Toplam Kayıt: 162.523
  • Değişkenler:
    • UserId: Hizmeti alan müşteri numarası
    • ServiceId: Hizmetin anonimleştirilmiş kimliği
    • CategoryId: Hizmetin anonimleştirilmiş kategorisi
    • CreateDate: Hizmet satın alım tarihi ve saati

Veri setinde, farklı ServiceId değerleri farklı CategoryId'lerde bambaşka hizmetleri temsil edebilir. Bu nedenle, ServiceId tek başına yeterli olmayabilir. Projede, her bir hizmeti "ServiceId_CategoryId" şeklinde birleştirilmiş yeni bir değişken olarak ele alarak analiz yapmak uygun bulunmuştur.

Yaklaşım ve Metodoloji

1. Veri Hazırlama

A. Veri Okuma ve Dönüşümler

  • armut_data.csv dosyası, Python'da pandas kütüphanesi ile okunmuştur.
  • Zaman bilgisi taşıyan CreateDate kolonunu datetime tipine dönüştürmek, veri üzerinde zamana bağlı analiz yapmayı kolaylaştırır.

B. Hizmet Sütunu Oluşturma

  • Tek bir satırın hangi hizmeti ifade ettiğini anlaşılır hale getirmek için ServiceId ve CategoryId değerleri "_" ile birleştirilmiş ve Hizmet adı verilen bir değişken elde edilmiştir.
  • Örnek: ServiceId = 9, CategoryId = 4 ise Hizmet = "9_4".

2. Aylık Sepet Tanımı

Armut platformunda fatura benzeri bir sepet tanımı bulunmadığından, her bir kullanıcının ay bazında aldığı hizmetler ortak bir sepette değerlendirilmiştir.

  • CreateDate içerisinden yıl-ay formatında bir tarih (örn. 2021-08) çıkarılmıştır.
  • UserId ile bu yıl-ay değeri birleştirilerek, tekil bir SepetID üretilmiştir. Böylece her kullanıcı için her ay bir veya birden fazla hizmetten oluşan "sepet" bilgisi elde edilir.

3. Birliktelik Kuralları ve Pivot Tablo

A. Pivot Tablo Hazırlama

  • Veriyi "SepetID" ve "Hizmet" eksenlerinde gruplayarak, hangi sepetlerde hangi hizmetlerin yer aldığını gösteren bir tablo hazırlanır.
  • Hizmet alınmışsa 1, alınmamışsa 0 şeklinde ikili (binary) bir matris elde edilir.

B. Apriori Algoritması ile Kuralların Çıkarılması

  • mlxtend kütüphanesinin apriori fonksiyonu ile sıklıkla birlikte görülen hizmet grupları tespit edilir (örn. min_support = 0.01).
  • association_rules fonksiyonuyla confidence, lift gibi metrikler hesaplanır ve hizmetler arasındaki olası ilişkiler listelenir.

4. Öneri Sistemi

A. Öneri Fonksiyonu

  • Elde edilen kurallar kullanılarak bir öneri fonksiyonu geliştirilir.
  • Bu fonksiyon, bir kullanıcının son aldığı hizmeti referans alarak, antecedents içerisinde bu hizmetin geçtiği kurallara bakar ve consequents içerisinden lift ya da confidence değeri en yüksek olan hizmetleri kullanıcıya önerir.
  • Örnek: Son aldığı hizmet "2_0" olan kullanıcıya, kurallar "2_0" aldıktan sonra sıkça "9_4" hizmetinin alınması yönünde yüksek bir lift değeri gösteriyorsa, sistem bu hizmeti öneride sıralayabilir.

Örnek Kod

python
import pandas as pd from mlxtend.frequent_patterns import apriori, association_rules # Veri Okuma ve Tarih Dönüşümü df = pd.read_csv("armut_data.csv") df["CreateDate"] = pd.to_datetime(df["CreateDate"]) # Hizmet Kolonu Oluşturma (ServiceId_CategoryId) df["Hizmet"] = df["ServiceId"].astype(str) + "_" + df["CategoryId"].astype(str) # Aylık Bazda Sepet Tanımı df["New_Date"] = df["CreateDate"].dt.strftime('%Y-%m') df["SepetID"] = df["UserId"].astype(str) + "_" + df["New_Date"] # Pivot Tablo: SepetID x Hizmet pivot_df = df.groupby(["SepetID", "Hizmet"])["Hizmet"].count().unstack().fillna(0) pivot_df = pivot_df.applymap(lambda x: 1 if x > 0 else 0) # Apriori ve Birliktelik Kuralları frequent_itemsets = apriori(pivot_df, min_support=0.01, use_colnames=True) rules = association_rules(frequent_itemsets, metric="support", min_threshold=0.01) # Öneri Fonksiyonu def arl_recommender(rules_df, target_service, rec_count=1): sorted_rules = rules_df[ rules_df["antecedents"].apply(lambda x: target_service in list(x)) ].sort_values("lift", ascending=False) recommendation_list = [] for i, products in sorted_rules["consequents"].apply(list).items(): for product in products: if product != target_service and product not in recommendation_list: recommendation_list.append(product) return recommendation_list[:rec_count] # Örnek: "2_0" hizmetini alan kullanıcıya 3 adet öneri recommended = arl_recommender(rules, "2_0", 3) print("Önerilen Hizmetler:", recommended)

Sonuç

Armut platformunda hizmetlerin birlikte satın alma eğilimleri analiz edilerek Association Rule Learning yaklaşımıyla özelleştirilmiş bir öneri sistemi geliştirilmiştir. Böylece:

  • Müşterilere, geçmiş hizmet satın alma davranışlarına göre tamamlayıcı hizmet önerileri sunulabilir.
  • Platform, çapraz satış (cross-sell) fırsatlarını daha etkin bir şekilde değerlendirebilir.
  • Kullanıcı deneyimi, ilgilenebilecekleri potansiyel hizmetlerin otomatik olarak önerilmesiyle iyileşir.

Ek adımlar olarak, coğrafi konum, kullanıcı segmenti veya mevsimsellik gibi ek özellikler dahil edilerek öneri kalitesi daha da artırılabilir. Aynı zamanda, farklı min_support ve min_threshold değerleriyle testler yaparak kuralların isabet oranı geliştirilebilir.

Bu çalışma, Armut verisi üzerinde Association Rule Learning yönteminin nasıl uygulanabileceğini örneklemektedir. Toplanan içgörüler, hizmet sağlayıcılar için kişiselleştirilmiş pazarlama ve müşteri deneyimi yönetimi süreçlerinde yol gösterici niteliktedir.