Problemas de Medição - 1
Com este artigo, iniciarei uma nova minissérie sobre problemas de medição, que ocupa um lugar importante no campo da ciência de dados.
Esta série será composta por três títulos principais:
- Classificação de produtos
- Classificando Produtos
- Classificando avaliações
Digamos que decidimos comprar um produto. Quando pesquisamos na internet algum produto que queremos comprar, vemos que existem muitas opções.
Então, quais são as coisas que nos ajudarão a decidir em tal situação?
Prova social
Prova social é o ato de copiar o comportamento de outras pessoas. Ou seja, quando decidimos comprar um produto, olhamos os comentários e avaliações de outras pessoas na hora de decidir qual escolher, e isso nos afeta na hora de comprar um produto.
Claro, não posso explicar essa definição psicologicamente, mas acho que posso dizer que basicamente conseguir o que todos aprovam nos faz sentir na zona de conforto.
O termo Prova Social foi apresentado em seu livro publicado em 1984 por Robert Cialdini.
Isso nos leva a outra definição:
A Sabedoria das Multidões
A sensação de que se todo mundo comprou aquele produto entre tantos produtos, eu também deveria comprar. Porque não e eu não quero pensar muito!
Problemas de Medição
Aqui, o que o marketplace precisa fazer é classificar os produtos da forma mais precisa e objetiva para os clientes.
Existem alguns problemas de medição encontrados ao fazer isso.
Nesta primeira parte da série, abordaremos a questão da classificação de produtos.
- Classificação de produtos
*Média
*Média ponderada com base no tempo
*Média ponderada com base no usuário
*Classificação Ponderada
Tentarei explicar os métodos mencionados acima que usaremos para classificação do produto com um exemplo.
Neste exemplo, examinaremos as avaliações de um curso online.
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()
Pode haver aumento ou diminuição da pontuação no momento, isso também deve ser avaliado.
Neste caso, devemos usar a Média Ponderada Baseada no Tempo para avaliar também outras situações.
*Média ponderada com base no tempo
Vamos converter a variável 'Timestamp' em variável de 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)
*Média ponderada com base no usuário
As notas dos usuários que assistiram ao curso em ritmos diferentes devem ser avaliadas com pesos diferentes:
df.groupby('Progress').agg({'Rating': 'mean'})
Para calcular a pontuação ponderada com o status de visualização do 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)
*Classificação Ponderada
Combinaremos os cálculos de média ponderada com base no tempo e média ponderada com base no usuário em uma única função.
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)
Conclusão
Neste artigo, expliquei coisas que nos ajudarão a decidir quando queremos comprar um produto e vimos os problemas de medição que podem surgir quando queremos classificar os produtos da maneira mais precisa e objetiva.
No próximo artigo, abordaremos a questão da classificação de produtos.
Convença e você será convencido!
Atenciosamente, Neslihan





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)