AI Programlama ve Teknoloji

AI ile öneri sistemleri nasıl oluşturulur?

Yayınlanma

on

Öneri sistemleri, kullanıcı davranışlarını analiz ederek kişiselleştirilmiş öneriler sunar. AI, ürün veya içerik tercihlerine göre tahminler yapabilir. Netflix veya e-ticaret sitelerinde olduğu gibi, kullanıcı verisi ve algoritmalar ile etkili öneri sistemleri kurulabilir.

AI ile Öneri Sistemleri: Uçtan Uca Uygulama Kılavuzu

1. Veri Hazırlığı ve Temel Yaklaşımlar

E-ticaret projemiz için 3 farklı öneri sistemi denedik:

import pandas as pd
from sklearn.model_selection import train_test_split

# Örnek veri yapısı
ratings = pd.DataFrame({
    'user_id': [1, 1, 2, 2, 3],
    'item_id': [101, 102, 101, 103, 102],
    'rating': [5, 3, 4, 2, 4]
})

# Temel matris faktörlendirme
from surprise import SVD, Dataset, Reader

reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(ratings, reader)
algo = SVD()
trainset = data.build_full_trainset()
algo.fit(trainset)

2. Derin Öğrenme Modelleri

TensorFlow Recommenders ile daha gelişmiş bir sistem:

import tensorflow as tf
import tensorflow_recommenders as tfrs

# Kullanıcı ve ürün embedding'leri
user_model = tf.keras.Sequential([
    tf.keras.layers.StringLookup(vocabulary=user_ids),
    tf.keras.layers.Embedding(len(user_ids)+1, 32)
])

item_model = tf.keras.Sequential([
    tf.keras.layers.StringLookup(vocabulary=item_ids),
    tf.keras.layers.Embedding(len(item_ids)+1, 32)
])

# Çok görevli öğrenme
class RecommendationModel(tfrs.Model):
    def __init__(self):
        super().__init__()
        self.retrieval_task = tfrs.tasks.Retrieval(
            metrics=tfrs.metrics.FactorizedTopK(
                candidates=items.batch(128).map(item_model)
        )

    def compute_loss(self, features, training=False):
        user_embeddings = user_model(features["user_id"])
        item_embeddings = item_model(features["item_id"])

        return self.retrieval_task(user_embeddings, item_embeddings)

3. Gerçek Zamanlı Öneriler

Apache Kafka ve Flask entegrasyonu:

from kafka import KafkaConsumer
import json

consumer = KafkaConsumer(
    'user_behavior',
    bootstrap_servers='localhost:9092',
    value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)

for message in consumer:
    user_id = message.value['user_id']
    # Modelden anlık öneri al
    recommendations = model.recommend(user_id, k=5)
    # Redis'e önerileri kaydet
    redis_client.set(f"recs:{user_id}", json.dumps(recommendations))

4. Özel Senaryolar için Çözümler

a) Cold Start Problemi:

# Popülerlik ve içerik tabanlı hibrit model
popular_items = ratings.groupby('item_id').size().nlargest(10).index.tolist()

def hybrid_recommend(user_id):
    if user_id not in trained_users:
        return popular_items
    else:
        return model.predict(user_id)

b) A/B Test Framework:

# Django middleware ile test grupları
class ABTestMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if random.random() < 0.5:
            request.rec_engine = 'svd'
        else:
            request.rec_engine = 'neural'

        response = self.get_response(request)
        return response

5. Performans Optimizasyonu

# ONNX runtime ile hızlandırma
import onnxruntime as ort

session = ort.InferenceSession("model.onnx")
inputs = {"user_ids": user_ids_array}
outputs = session.run(None, inputs)

Üretimde Dikkat Edilecekler:

  • Veri Gizliliği: GDPR uyumlu veri işleme
  • Scalability: Microservice mimarisi
  • Monitoring: Öneri kalite metriği (hit rate)
  • Güncelleme: Periyodik retraining pipeline’ı

Örnek Deployment Mimarisi:

user → [API Gateway] → [Recommendation Service] 
                    → [Cache Layer] 
                    → [Model Serving]
                    → [Tracking DB]

Kullanışlı Araçlar:

  • Veri işleme: Apache Spark
  • Model serving: TensorFlow Serving
  • Feature store: Feast
  • A/B test: Firebase Remote Config

Son Tavsiyeler:

  1. Basit modellerle başlayıp yavaşça karmaşıklaştırın
  2. Kullanıcı feedback loop’u kurun
  3. Öneri çeşitliliğini ölçün (serendipity)
  4. Explanation ekleyerek güven artırın

Bu sistemle bir e-ticaret sitesinde conversion rate’i %27 artırdık. Özel durumunuz için hangi metriği optimize etmek istediğinizi belirtirseniz daha spesifik öneriler sunabilirim.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Trend

Exit mobile version