Problemas de medición — 1
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!
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

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































