Giriş
E-ticaret platformları ve inceleme siteleri, kullanıcıların içeriği keşfetmelerini ve ürün/hizmet kalitesini değerlendirmelerini sağlamak için çeşitli sıralama ve rating algoritmalarını kullanırlar. Bu yazıda, farklı algoritmaların örnek uygulamalarını inceleyeceğiz ve her bir algoritmanın işleyişini detaylı bir şekilde açıklayacağız.
1. Wilson Lower Bound Algoritması
Wilson Lower Bound, kullanıcı incelemelerini sıralamak için pozitif ve negatif oylar arasındaki farkı değerlendiren bir güven aralığı hesaplaması yapar. Bu algoritma, kullanıcıların verdiği oyların sayısı az olduğunda bile güvenilir bir sıralama sağlar.
def wilson_lower_bound(up, down, confidence=0.95):
n = up + down
if n == 0:
return 0
z = 1.96 # Z-score for 95% confidence
phat = up / n
return (phat + z * z / (2 * n) - z * math.sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n)
2. Bayesian Average
Bayesian Average, kullanıcı incelemelerini ağırlıklandırarak bir ortalama puan hesaplamak için kullanılır. Bu algoritma, özellikle az sayıda oy alan ürünler veya içerikler için etkili bir sıralama sağlar.
def bayesian_average(up, down, confidence=0.95):
n = up + down
if n == 0:
return 0
z = 1.96 # Z-score for 95% confidence
phat = up / n
return (phat + z * z / (2 * n) - z * math.sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n)
3. Average Rating
Average Rating, kullanıcıların verdiği puanların doğrudan ortalamasını alarak bir sıralama yapar. Bu yöntem basit ve hızlıdır, ancak manipülasyona karşı daha duyarlı olabilir.
def average_rating(up, down):
total_votes = up + down
return up / total_votes if total_votes > 0 else 0
4. Net Promoter Score (NPS)
Net Promoter Score (NPS), müşteri memnuniyetini değerlendirmek ve bir şirketin müşteri sadakatini anlamak için kullanılan bir sıralama ölçüsüdür. Genellikle, bir ürün veya hizmeti “promotör” (tavsiye eden), “pasif” (duyarsız) ve “kritik” (olumsuz) olarak sınıflandıran basit bir soru sorularak ölçülür:
Soru: “Bu ürünü/hizmeti bir arkadaşınıza tavsiye eder miydiniz?”
- Promotörler (9-10): Yüksek puan veren ve ürün veya hizmeti memnuniyetle tavsiye eden kullanıcılar.
- Pasif Kullanıcılar (7-8): Ortalama bir memnuniyet seviyesine sahip, ancak çok etkilenmemiş kullanıcılar.
- Kritik Kullanıcılar (0-6): Düşük puan veren ve üründen veya hizmetten memnun olmayan kullanıcılar.
Örnek Uygulama:
def calculate_nps(promoters, passives, critics):
total_responses = promoters + passives + critics
if total_responses == 0:
return 0
nps = (promoters / total_responses * 100) - (critics / total_responses * 100)
return nps
5. MAD (Mean Absolute Deviation)
Mean Absolute Deviation (MAD), bir değişkenin ortalamasına olan mesafeyi ölçen bir istatistiksel metriktir. Sıralama ve rating algoritmalarında kullanılarak, puanların ortalamadan ne kadar uzak olduğunu değerlendirerek anormallikleri belirlemek için kullanılabilir.
Hesaplama: MAD, her puanın ortalamadan mutlak değerli farklarını alır, bu farkları toplar ve ardından toplam farkı puan sayısına böler.
def mean_absolute_deviation(scores):
n = len(scores)
if n == 0:
return 0
mean = sum(scores) / n
mad = sum(abs(score - mean) for score in scores) / n
return mad
Daha yüksek bir MAD değeri, puanların ortalamadan daha uzak olduğunu ve daha fazla anormallik içerdiğini gösterebilir. MAD, özellikle bir veri setinin puanların dağılımını anlamak ve manipülasyonu tespit etmek için kullanışlı bir metriktir.
6. Hybrid Sıralama
Açıklama: Hybrid sıralama, birden fazla sıralama algoritmasını birleştirerek daha güçlü ve esnek bir sıralama yöntemi oluşturmayı amaçlar. Örneğin, Wilson Lower Bound’ın güvenilirliğini ve Bayesian Average’ın ağırlıklandırma yeteneğini bir araya getirebiliriz. Bu, farklı özellikleri birleştirerek daha kapsamlı bir sıralama sonucu elde etmemize yardımcı olabilir.
Örnek Uygulama:
import math
def wilson_lower_bound(up, down, confidence=0.95):
n = up + down
if n == 0:
return 0
z = 1.96 # Z-score for 95% confidence
phat = up / n
return (phat + z * z / (2 * n) - z * math.sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n)
def bayesian_average(up, down, confidence=0.95):
n = up + down
if n == 0:
return 0
z = 1.96 # Z-score for 95% confidence
phat = up / n
return (phat + z * z / (2 * n) - z * math.sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n)
def hybrid_ranking(wilson_score, bayesian_average, weight_factor=0.7):
return (wilson_score * weight_factor) + (bayesian_average * (1 - weight_factor))
# Örnek kullanım
up_votes = 150
down_votes = 10
wilson_score = wilson_lower_bound(up_votes, down_votes)
bayesian_average_score = bayesian_average(up_votes, down_votes)
hybrid_score = hybrid_ranking(wilson_score, bayesian_average_score)
print(f"Wilson Lower Bound Score: {wilson_score}")
print(f"Bayesian Average Score: {bayesian_average_score}")
print(f"Hybrid Score: {hybrid_score}")
Bu örnekte, wilson_lower_bound
ve bayesian_average
fonksiyonları ile elde edilen skorları kullanarak hybrid_ranking
fonksiyonuyla birleştiriyoruz. weight_factor
parametresi, her iki skorun ağırlıklarını ayarlamak için kullanılır. Bu şekilde, her iki algoritmanın avantajlarını birleştirerek daha güçlü bir sıralama elde edebilirsiniz.
7. Potansiyel Bazlı Sıralama
Açıklama: Potansiyel bazlı sıralama, kullanıcıların geçmişteki davranışlarına dayanarak gelecekteki beklentilerini değerlendirerek sıralama yapmayı amaçlar. Kullanıcıların geçmişteki tercihleri ve etkileşimleri üzerinden gelecekteki potansiyel eğilimleri belirlemeye çalışır.
Algoritma:
- Kullanıcının geçmişteki puanları ve etkileşimleri üzerinden bir potansiyel beklenti hesaplanır.
- Gelecekteki potansiyel beklenti, mevcut puanlara eklenerek sıralama yapılır.
Örnek Uygulama:
def calculate_potential_expectation(user_history):
# Kullanıcının geçmişteki puanları ve etkileşimleri üzerinden potansiyel beklentiyi hesapla
# Bu hesaplama, özelleştirilebilir ve kullanıcının platform üzerindeki etkileşimine bağlı olarak değişebilir
potential_expectation = custom_potential_calculation(user_history)
return potential_expectation
def potential_based_ranking(current_rating, user_history):
# Kullanıcının geçmişteki davranışlarına göre gelecekteki beklentileri hesapla
potential_expectation = calculate_potential_expectation(user_history)
# Gelecekteki beklentileri dikkate alarak sıralama yap
return current_rating + potential_expectation
Bu örnekte, calculate_potential_expectation
fonksiyonu, kullanıcının geçmiş etkileşimlerine dayanarak potansiyel beklentiyi hesaplar. potential_based_ranking
fonksiyonu, mevcut puanlara bu potansiyel beklentiyi ekleyerek sıralama yapar. Bu şekilde, kullanıcının geçmiş tercihleri ve etkileşimleri üzerinden gelecekteki potansiyel eğilimleri dikkate alarak daha kişiselleştirilmiş bir sıralama elde edebilirsiniz.