Foursquare: “Oyunlaştırmanın Matematiği”

Foursquare’de 60 milyon civarı mekândan oluşan bir veritabanımız var. Ve temsil ettiği dünya gibi, veritabanımız da dünyanın her tarafından restoranın açılış kapanış saatlerinden tutun, yeni bir berberin adresine kadar hemen hemen her şey hakkında sürekli güncelleme gönderen kullanıcılar ile sürekli değişen bir veritabanımız var. Mekânlarımızın olduğu veritabanının kesinliğini sürdürebilmek için bu değişiklikler şehirlerindeki veya çevrelerindeki mekân verilerini tedbirli bir şekilde sürekli gözleyen ve bakımını sağlayan biricik Superuserlarımız tarafından oylanır.

Tıpkı diğer kitle tabanlı verisetleri gibi (Quora, Stack Overflow, Amazon Reviews) kullanıcılara imtiyazlarına, saygınlıklarına ve yaptıkları etkiye göre puan veya oy veriyoruz. Puan ve oyunlaştırma Superuser’ların hoşuna gidiyor. Bu sistem özenli ve çalışkan SU’ları (çoğunluk zaten böyle) ödüllendirip, bazı zararlı “kötü oyuncuları” cezalandırıyor. Ama veri bilimcileri olasılıkları ve garantiyi sever. “%99 eminiz ki her girdi doğru” gibi cümleler kurmakla ilgileniyoruz. Acaba hem kullanıcılara davranışlarından ötürü onları ödüllendirecek hem de veritabanımızın kesinliğini garanti altına alacak şekilde puanları nasıl dağıtabiliriz ?

Foursquare’de, önerilen mekân ayrıntısı güncellemelerini ayırmak için çok basit, en temel prensiplere dayanan bir yöntemimiz var. Her Superuser’ın oylama duyarlılığını, bal küpü (honeypots) dediğimiz kasıtlı olarak güncelleme kuyruğuna sokulmuş cevapları zaten bilinen güncelleme önerileri üzerindeki performansları ile ölçebiliriz. Performansı ölçme ve bu olasılıkları doğru kullanma bizim her bir Superuser’ın oylarına nasıl puan verdiğimizin anahtarıdır.

Matematik

Şimdi bütün bu hikâyeyi(!) biraz somutlaştıralım. H0 dünyanın 1 veya -1 olması fark etmeden gerçek halini ifade etsin ki buna bağlı olarak önerilen güncellemenin doğruluğunu ve yanlışlığını sırayla yorumlayabilelim. Bunu gözlemlemeyiz ancak şunu biliyoruz ki, p0 a-priori olasılığına göre H0 = 1. 1 numaralı kullanıcı H1‘i, H0 ve (1 – p1) bütünleyeninin doğruluğu ile, bağımsız p1 olasılığı ile oylar (tekrardan 1 veya -1, “olmuş bu” veya “cıks olmamış bu”‘yu temsil eder). Buradan Bayes kuralı bize şunu verir.

Çözümü aşağıda formülü verilen komşuluk oranına 2 göre yazıyoruz.

Ve aşağıdaki eşitliği elde ediyoruz.

Aslında genel olarak olayı görmek gayet basit,

Çarpmak zor olduğundan logit veya komşuluk fonksiyonunu kullanacağız,

Bu formülden elde edilen:

Sonra elimizde kalan

Devam edecek olursak, 1. Kullanıcının oylarını döktüğünü varsayın, 2. Kullanıcı H2‘yi bağımsız olasılık tümleyen p2 ile oylar. Screen Shot 2014-03-05 at 16.15.31 sonucunu, aşağıdaki Bayes analizini elde edene kadar artarak tümevarımsal olarak elde eden yeni öncülümüz olarak kabul edebiliriz.

Aslında n adet oyumuz var, H1,…,Hn

Çözüm

Yukarıdaki denklem bize k. kullanıcı için aşağıdaki denklemi baz alarak sk  puan vermemizi söyler.

12

Bütün “olmuş bu” oylarını toplayıp, bunlardan “cıks olmamış bu” oylarını çıkarttığımız zaman güncelleme puanını elde etmiş oluruz. Bu puan kolayca güncellemenin doğru olduğu olasılığı olarak yorumlanabilir. Bu değişiklikler için kesinlik alt limitini istenen doğruluk oranını sağlamak için değiştirebiliriz örneğin p = %99. Sonra önerilen güncellemenin kabulünü aşağıdaki şekilde yaklaşık olarak buluruz.

13

Aynı şekilde ret edilmesini de

14

Diğer bir değişke, eğer t = logit(p) ‘i puan alt limiti ve s0=logit(p0) ‘i de yeni önerilen değişikliğe atarsak, (3) ve (4) şu hale gelir

15

Ve

16

Bunlar oylama için tam olarak umacağınız denklemlerdir. Ama şimdi matematikten türetildiler!

Faydalar

Etkin, veriye yönelimlilik veritabanı kesinliğini garantiler. Kullanıcının doğruluk oranlarına bakıp puanları seçerek, önerilen güncelleme için, matematiğin gerekli kesinliği yakaladığı anda oylama işlemini bitirmek üzere zeki yöntemler ile payına düşen puanı dağıtabiliyoruz.

Hala puanlar kullanılıyor, sadece hesaplama yöntemlerinde zekice şeyler var. Eklemeli puan sisteminde önerilen değişikliğin onaylanması için kullanıcının doğruluk oranı ve kesinlik alt limitine ihtiyaç duyuluyor. Bu işlem ayrıca ad-hoc noktalarından oluşan sistemi alıp deneysel kanıt tabanlı daha zeki sistemlere çevirmeyi kolaylaştırıyor.

Ölçülebilir ve Genişletilebilir, bu parametreler otomatik olarak eğitilir ve kullanıcı tabanının davranışına göre kendini adapte edebilir. Kullanım senaryolarını daraltmak için yapılan tartışmalarla geçen uzun toplantılara veda. Şu ana kadar hep pk’nın kullanıcı merkezli bakış açısını aldık(k burada kullanıcının doğruluk oranı). Ama bunun tabii ki ötesine geçebiliriz. Örneğin, pk “k kullanıcısının aynı mekanda üç kere bulunup civarda çalışıyor olmasının doğruluğu” olabilirdi. Bu tarz cümleler, keyfi olarak karmaşık olmasının yanı sıra tahmini olarak bal küpü performansının (lojistik) gerilemesine sebep olur. Bu değişikliklerin veri kaynaklı olacağı ve kullanıcının veya durumun ne kadar “puan” alacağı gibi öznel yargılardan uzak olduğu noktadır.

Bazı pratik düşünceler

• Pratikte, önerilen bir değişikliğin onaylanması (3. Numaralı denklem) veya reddedilmesi (4. Numaralı denklem) için farklı eşik değerleri belirlemek isteyebiliriz.

• Simgeleme basitliği için, kullanıcı k’nın doğruluk oranlarında yanlış pozitif ve yanlış negatif gelmesinin eşit pk olasılığına sahip olduğunu varsaydık. Genelde durum bu şekilde değil tabi. Genel mantığın matematiğini çözebilmesi için bu kısmını okuyucuya bıraktık.

• Kullanıcılar tamsayıları sever. Sk ‘yı en yakın tamsayıya yuvarlamak zorundayız. (3) ve (4) numaralı denklemlere benzeyen doğrusal denklemleri bu pozitif katsayılarla çarpabiliriz. Ayrıca [.]’nın yuvarlama fonksiyonu olduğu ve α’nın büyük pozitif çarpan olduğu denklemde sk’ya bu değeri atayabiliriz. Büyük bir α değeri, doğruluk kaybını önleyecektir.

• p1,p2, … değerlerinin bal küplerinden nasıl elde edileceğini önceden açıklamıştık ama yeni önerilen güncellemelerin doğruluğu olan p0’ı nasıl elde ederiz. Bir yol, o doğruluk oranlarını yukarıda oylamadan önce ön yükleme yapmaktır: Bu oylama tekniğini, önerilen güncellemelerin ne kadarlık kısmının onaylandığından yola çıkarak, önerilerin doğruluğunu çıkarsamak için kullanabiliriz.

• Bayes yumuşatması (Bayesian Smoothing). Bağımsız bireylerin doğruluk oranlarını diğerlerine göre düşük-doğruluklu varsayarız. Bu kötümser varsayım yeni ve test edilmemiş kullanıcıların sistemde çok fazla etki yaratmasını önler. Ayrıca önceki kötümser durumdan daha isabetli karar verdikleri ve oy verdikleri sürece kullanıcıları ödüllendirir. Tabi ki; yeni Superuserlara kendilerini kanıtlamaları için balküpleri ile karşılaşma ihtimallerinin komşuluğunu sürekli artırıyoruz.

Yazının orijinaline buradan ulaşabilirsiniz.

Barışcan Tunalı

Ege Üniversitesi Bilgisayar Mühendisliği mezunu, 1990 model, gezmeyi tozmayı sever, evde oturmak zor gelir. Naçizane uzmanlık alanı iş zekâsı ve veri madenciliğidir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir