Messprobleme – 1
Mit diesem Artikel starte ich eine neue Miniserie zu Messproblemen, die im Bereich der Datenwissenschaft einen wichtigen Platz einnehmen.
Diese Serie wird aus drei Haupttiteln bestehen:
- Bewertungsprodukte
- Sortieren von Produkten
- Bewertungen sortieren
Nehmen wir an, wir entscheiden uns für den Kauf eines Produkts. Wenn wir im Internet nach einem Produkt suchen, das wir kaufen möchten, sehen wir, dass es viele Möglichkeiten gibt.
Was sind also die Dinge, die uns in einer solchen Situation bei der Entscheidung helfen werden?
Sozialer Beweis
Unter Social Proof versteht man das Kopieren des Verhaltens anderer Menschen. Das heißt, wenn wir uns für den Kauf eines Produkts entscheiden, schauen wir uns die Kommentare und Bewertungen anderer Leute an und überlegen, welches Produkt wir wählen sollen, und das wirkt sich auf uns beim Kauf eines Produkts aus.
Natürlich kann ich diese Definition nicht psychologisch erklären, aber ich kann wohl sagen, dass wir uns grundsätzlich in der Komfortzone fühlen, wenn wir das bekommen, was alle gutheißen.
Der Begriff Social Proof wurde in seinem 1984 von Robert Cialdini veröffentlichten Buch vorgeschlagen .
Dies bringt uns zu einer anderen Definition:
Die Weisheit der Massen
Das Gefühl, dass, wenn jeder von so vielen Produkten dieses Produkt gekauft hat, ich das auch kaufen sollte. Denn warum nicht und ich möchte nicht zu viel nachdenken!
Messprobleme
Hier muss der Marktplatz die Produkte so genau und objektiv wie möglich für die Kunden sortieren.
Dabei treten einige Messprobleme auf.
In diesem ersten Teil der Serie befassen wir uns mit dem Thema Bewertungsprodukte.
- Bewertungsprodukte
*Durchschnitt
*Zeitbasierter gewichteter Durchschnitt
*Benutzerbasierter gewichteter Durchschnitt
*Gewichtete Bewertung
Ich werde versuchen, die oben genannten Methoden, die wir zur Produktbewertung verwenden werden, anhand eines Beispiels zu erläutern.
In diesem Beispiel untersuchen wir die Bewertungen eines Online-Kurses.
Installieren und importieren
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()
Es kann derzeit zu einem Anstieg oder Rückgang der Punktestände kommen, dies sollte ebenfalls ausgewertet werden.
In diesem Fall sollten wir den zeitbasierten gewichteten Durchschnitt auch zur Bewertung anderer Situationen verwenden.
*Zeitbasierter gewichteter Durchschnitt
Lassen Sie uns die Variable „Timestamp“ in eine Zeitvariable konvertieren
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)
*Benutzerbasierter gewichteter Durchschnitt
Die Bewertungen von Nutzern, die den Kurs unterschiedlich schnell gesehen haben, sollten mit unterschiedlicher Gewichtung bewertet werden:
df.groupby('Progress').agg({'Rating': 'mean'})
So berechnen Sie die gewichtete Punktzahl anhand des Anzeigestatus des Kurses:
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)
*Gewichtete Bewertung
Wir werden die Berechnungen des zeitbasierten gewichteten Durchschnitts und des benutzerbasierten gewichteten Durchschnitts in einer einzigen Funktion kombinieren.
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)
Abschluss
In diesem Artikel habe ich Dinge erklärt, die uns bei der Entscheidung helfen, wann wir ein Produkt kaufen möchten, und wir haben die Messprobleme gesehen, die auftreten können, wenn wir die Produkte möglichst genau und objektiv sortieren möchten.
Im nächsten Artikel befassen wir uns mit dem Thema Sortieren von Produkten.
Überzeugen Sie, und Sie werden überzeugt sein!
Beste Grüße, Neslihan

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































