Problemas de Medição - 1

Mar 20 2023
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: Digamos que decidimos comprar um produto.

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!

Convença e você será convencido!

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