Ölçüm Problemleri — 1
Bu yazı ile veri bilimi alanında önemli bir yere sahip olan ölçüm problemlerini konu alan yeni bir mini diziye başlayacağım.
Bu seri üç ana başlıktan oluşacaktır:
- Derecelendirme Ürünleri
- Ürünleri Sıralama
- İncelemeleri Sıralama
Diyelim ki bir ürün almaya karar verdik. İnternette satın almak istediğimiz herhangi bir ürünü arattığımızda birçok seçeneğin olduğunu görebiliriz.
Peki böyle bir durumda karar vermemize yardımcı olacak şeyler nelerdir?
Sosyal kanıt
Sosyal kanıt, diğer insanların davranışlarını kopyalama eylemidir. Yani bir ürün almaya karar verdiğimizde hangisini seçeceğimizi düşünürken başkalarının yorumlarına ve değerlendirmelerine bakıyoruz ve bu da ürün alırken bizi etkiliyor.
Elbette bu tanımı psikolojik olarak açıklayamam ama temelde herkesin onayladığını almanın bizi rahatlık alanında hissettirdiğini söyleyebilirim sanırım.
Sosyal Kanıt terimi , Robert Cialdini tarafından 1984 yılında yayınlanan kitabında ortaya atılmıştır .
Bu bizi başka bir tanıma getiriyor:
Kalabalığın Bilgeliği
Bunca ürün arasından herkes o ürünü aldıysa ben de alayım duygusu. Çünkü neden olmasın ve çok fazla düşünmek istemiyorum!
Ölçüm Problemleri
Burada pazaryerinin yapması gereken ürünleri müşteriler için en doğru ve objektif şekilde sıralamaktır.
Bunu yaparken karşılaşılan bazı ölçüm sorunları vardır.
Serinin bu ilk bölümünde, ürünleri derecelendirme konusunu ele alacağız.
- Derecelendirme Ürünleri
*Ortalama
*Zamana Dayalı Ağırlıklı Ortalama
*Kullanıcı Bazlı Ağırlıklı Ortalama
*Ağırlıklı Derecelendirme
Ürün derecelendirme için kullanacağımız yukarıda belirtilen yöntemleri bir örnekle açıklamaya çalışacağım.
Bu örnekte, çevrimiçi bir kursun derecelendirmelerini inceleyeceğiz.
Yükleme ve İçe Aktarma
import pandas as pd
import datetime as dt
import math
import scipy.stats as st
from sklearn.preprocessing import MinMaxScaler
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.width', 500)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('display.float_format', lambda x: '%5f' % x)
df = pd.read_csv(r'C:\course_reviews.csv')
df.head()
df.shape
df['Rating'].value_counts()
df['Questions Asked'].value_counts()
df.groupby('Questions Asked').agg({'Questions Asked': 'count',
'Rating': 'mean'})
df['Rating'].mean()
Şu an puanlarda bir artış veya düşüş olabilir, bunun da değerlendirilmesi gerekiyor.
Bu durumda, diğer durumları da değerlendirmek için Zamana Dayalı Ağırlıklı Ortalamayı kullanmalıyız.
*Zamana Dayalı Ağırlıklı Ortalama
'Timestamp' değişkenini zaman değişkenine çevirelim
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
current_date = pd.to_datetime('2021-02-10 0:0:0')
df['days'] = (current_date - df['Timestamp']).dt.days
df[df['days'] <= 30] .count()
df.loc[df['days'] <= 30, 'Rating'].mean()
df.loc[df['days'] <= 30, 'Rating'].mean() * 28/100 + \
df.loc[(df['days'] > 30) & (df['days'] <= 90), 'Rating'].mean() * 26/100 + \
df.loc[(df['days'] > 90) & (df['days'] <= 180), 'Rating'].mean() * 24/100 + \
df.loc[(df['days'] > 180), 'Rating'].mean() * 22/100
def time_based_weighted_average(dataframe, w1=28, w2=26, w3=24, w4=22):
return dataframe.loc[df['days'] <= 30, 'Rating'].mean() * w1/100 + \
dataframe.loc[(df['days'] > 30) & (dataframe['days'] <= 90), 'Rating'].mean() * w2/100 + \
dataframe.loc[(df['days'] > 90) & (dataframe['days'] <= 180), 'Rating'].mean() * w3/100 + \
dataframe.loc[(df['days'] > 180), 'Rating'].mean() * w4/100
time_based_weighted_average(df)
time_based_weighted_average(df, 30, 26, 22, 22)
*Kullanıcı Bazlı Ağırlıklı Ortalama
Kursu farklı oranlarda izleyen kullanıcıların puanları farklı ağırlıklarla değerlendirilmelidir:
df.groupby('Progress').agg({'Rating': 'mean'})
Kursun görüntüleme durumuyla ağırlıklı puanı hesaplamak için:
df.loc[df['Progress'] <= 10, 'Rating'].mean() * 22/100 + \
df.loc[(df['Progress'] > 10) & (df['Progress'] <= 45), 'Rating'].mean() * 24/100 + \
df.loc[(df['Progress'] > 45) & (df['Progress'] <= 75), 'Rating'].mean() * 26/100 + \
df.loc[(df['Progress'] > 75), 'Rating'].mean() * 28/100
def user_based_weighted_average(dataframe, w1=22, w2=24, w3=26, w4=28):
return dataframe.loc[df['Progress'] <= 10, 'Rating'].mean() * w1/100 + \
dataframe.loc[(df['Progress'] > 10) & (dataframe['Progress'] <= 45), 'Rating'].mean() * w2/100 + \
dataframe.loc[(df['Progress'] > 45) & (dataframe['Progress'] <= 75), 'Rating'].mean() * w3/100 + \
dataframe.loc[(df['Progress'] > 75), 'Rating'].mean() * w4/100
user_based_weighted_average(df)
user_based_weighted_average(df, 20, 24, 26, 30)
*Ağırlıklı Derecelendirme
Zaman Bazlı Ağırlıklı Ortalama ve Kullanıcı Bazlı Ağırlıklı Ortalama hesaplamalarını tek bir fonksiyonda birleştireceğiz.
def course_weighted_rating(dataframe, time_w=50, user_w=50):
return time_based_weighted_average(dataframe) * time_w/100 + user_based_weighted_average(dataframe) * user_w/100
course_weighted_rating(df)
Çözüm
Bu yazıda bir ürünü ne zaman almak istediğimize karar vermemize yardımcı olacak şeyleri anlattım ve ürünleri en doğru ve objektif şekilde sıralamak istediğimizde ortaya çıkabilecek ölçü problemlerini görmüş olduk.
Bir sonraki yazımızda ürünleri sıralama konusuna değineceğiz.
İkna edin ve ikna olacaksınız!
En iyi, Neslihan

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































