Problemas de medición — 1

Mar 20 2023
Con este artículo, comenzaré una nueva miniserie sobre problemas de medición, que tiene un lugar importante en el campo de la ciencia de datos. Esta serie constará de tres títulos principales: Digamos que decidimos comprar un producto.

Con este artículo, comenzaré una nueva miniserie sobre problemas de medición, que tiene un lugar importante en el campo de la ciencia de datos.

Esta serie constará de tres títulos principales:

  • Calificación de productos
  • Clasificación de productos
  • Clasificación de reseñas

Digamos que decidimos comprar un producto. Cuando buscamos cualquier producto que queramos comprar en internet, podemos ver que hay muchas opciones.

Entonces, ¿cuáles son las cosas que nos ayudarán a decidir en tal situación?

Prueba social

La prueba social es el acto de copiar el comportamiento de otras personas. Es decir, cuando decidimos comprar un producto, nos fijamos en los comentarios y valoraciones de otras personas mientras nos planteamos cuál elegir, y esto nos afecta a la hora de adquirir un producto.

Por supuesto, no puedo explicar esta definición psicológicamente, pero supongo que puedo decir que básicamente obtener lo que todos aprueban nos hace sentir en la zona de confort.

El término Prueba Social fue propuesto en su libro publicado en 1984 por Robert Cialdini.

Esto nos lleva a otra definición:

La sabiduría de las multitudes

La sensación de que si todos han comprado ese producto entre tantos productos, yo también debería comprarlo. ¡Por qué no y no quiero pensar demasiado!

¡Convenced y seréis convencidos!

Problemas de medición

Aquí, lo que debe hacer el mercado es clasificar los productos de la manera más precisa y objetiva para los clientes.

Se han encontrado algunos problemas de medición al hacer esto.

En esta primera parte de la serie, cubriremos el tema de la calificación de productos.

  • Calificación de productos

*Promedio

*Promedio ponderado basado en el tiempo

*Promedio ponderado basado en el usuario

*Calificación ponderada

Intentaré explicar los métodos mencionados anteriormente que usaremos para calificar productos con un ejemplo.

En este ejemplo, examinaremos las calificaciones de un curso en línea.

Instalar e Importar

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

Puede haber un aumento o disminución en los puntajes en este momento, esto también debe evaluarse.

En este caso, deberíamos usar el promedio ponderado basado en el tiempo para evaluar también otras situaciones.

*Promedio ponderado basado en el tiempo

Convirtamos la variable 'Timestamp' en variable de tiempo

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)

*Promedio ponderado basado en el usuario

Las calificaciones de los usuarios que vieron el curso a diferentes velocidades deben evaluarse con diferentes pesos:

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

Para calcular la puntuación ponderada con el estado de visualización del curso:

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)

*Calificación ponderada

Combinaremos los cálculos del promedio ponderado basado en el tiempo y el promedio ponderado basado en el usuario en una sola función.

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)

Conclusión

En este artículo he explicado cosas que nos ayudarán a decidir cuándo queremos comprar un producto, y hemos visto los problemas de medición que pueden surgir cuando queremos clasificar los productos de la forma más precisa y objetiva.

En el próximo artículo, cubriremos el tema de la clasificación de productos.

¡Convenced y seréis convencidos!

Mejor, Neslihan