Problemi di misurazione — 1

Mar 20 2023
Con questo articolo, inizierò una nuova mini-serie sui problemi di misurazione, che ha un posto importante nel campo della scienza dei dati. Questa serie sarà composta da tre titoli principali: Diciamo che decidiamo di acquistare un prodotto.

Con questo articolo, inizierò una nuova mini-serie sui problemi di misurazione, che ha un posto importante nel campo della scienza dei dati.

Questa serie sarà composta da tre titoli principali:

  • Valutazione dei prodotti
  • Ordinamento dei prodotti
  • Classificazione delle recensioni

Diciamo che decidiamo di acquistare un prodotto. Quando cerchiamo su Internet qualsiasi prodotto che desideriamo acquistare, possiamo vedere che ci sono molte opzioni.

Quindi quali sono le cose che ci aiuteranno a decidere in una situazione del genere?

Prova sociale

La prova sociale è l'atto di copiare il comportamento di altre persone. Cioè, quando decidiamo di acquistare un prodotto, guardiamo i commenti e le valutazioni di altre persone valutando quale scegliere, e questo ci riguarda quando acquistiamo un prodotto.

Certo, non posso spiegare psicologicamente questa definizione, ma immagino di poter dire che fondamentalmente ottenere ciò che tutti approvano ci fa sentire nella zona di comfort.

Il termine Social Proof è stato proposto nel suo libro pubblicato nel 1984 da Robert Cialdini.

Questo ci porta ad un'altra definizione:

La saggezza delle folle

La sensazione che se tutti hanno comprato quel prodotto tra tanti prodotti, dovrei comprare anche quello. Perché perché no e non voglio pensare troppo!

Convinci e sarai convinto!

Problemi di misurazione

Qui, ciò che il mercato deve fare è ordinare i prodotti nel modo più accurato e obiettivo per i clienti.

Ci sono alcuni problemi di misurazione riscontrati durante questa operazione.

In questa prima parte della serie tratteremo la questione della valutazione dei prodotti.

  • Valutazione dei prodotti

*Media

*Media ponderata basata sul tempo

*Media ponderata basata sull'utente

*Valutazione ponderata

Proverò a spiegare i metodi sopra menzionati che utilizzeremo per la valutazione del prodotto con un esempio.

In questo esempio, esamineremo le valutazioni di un corso online.

Installa e importa

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()

Al momento potrebbe esserci un aumento o una diminuzione dei punteggi, anche questo dovrebbe essere valutato.

In questo caso, dovremmo utilizzare la media ponderata basata sul tempo per valutare anche altre situazioni.

*Media ponderata basata sul tempo

Convertiamo la variabile 'Timestamp' nella variabile tempo

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)

*Media ponderata basata sull'utente

Le valutazioni degli utenti che hanno guardato il corso a velocità diverse dovrebbero essere valutate con pesi diversi:

df.groupby('Progress').agg({'Rating': 'mean'})

Per calcolare il punteggio ponderato con lo stato di visualizzazione del corso:

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)

*Valutazione ponderata

Combineremo i calcoli della media ponderata basata sul tempo e della media ponderata basata sull'utente in un'unica funzione.

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)

Conclusione

In questo articolo ho spiegato le cose che ci aiuteranno a decidere quando acquistare un prodotto e abbiamo visto i problemi di misurazione che possono sorgere quando vogliamo ordinare i prodotti nel modo più accurato e obiettivo.

Nel prossimo articolo tratteremo il problema dello smistamento dei prodotti.

Convinci e sarai convinto!

Migliore, Neslihan