AI Programlama ve Teknoloji
AI ile öneri sistemleri nasıl oluşturulur?
Ö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:
- Basit modellerle başlayıp yavaşça karmaşıklaştırın
- Kullanıcı feedback loop’u kurun
- Öneri çeşitliliğini ölçün (serendipity)
- 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.