Problèmes de mesure — 1
Avec cet article, je vais commencer une nouvelle mini-série sur les problèmes de mesure, qui a une place importante dans le domaine de la science des données.
Cette série sera composée de trois titres principaux :
- Évaluation des produits
- Trier les produits
- Avis de tri
Disons que nous décidons d'acheter un produit. Lorsque nous recherchons un produit que nous souhaitons acheter sur Internet, nous pouvons constater qu'il existe de nombreuses options.
Alors, quelles sont les choses qui nous aideront à décider dans une telle situation ?
La preuve sociale
La preuve sociale est le fait de copier le comportement des autres. C'est-à-dire que lorsque nous décidons d'acheter un produit, nous examinons les commentaires et les évaluations des autres tout en considérant lequel choisir, et cela nous affecte lors de l'achat d'un produit.
Bien sûr, je ne peux pas expliquer cette définition psychologiquement, mais je suppose que je peux dire qu'en gros, obtenir ce que tout le monde approuve nous fait nous sentir dans la zone de confort.
Le terme Social Proof a été mis en avant dans son livre publié en 1984 par Robert Cialdini.
Cela nous amène à une autre définition :
La sagesse des foules
Le sentiment que si tout le monde a acheté ce produit parmi tant de produits, je devrais l'acheter aussi. Parce que pourquoi pas et je ne veux pas trop réfléchir !
Problèmes de mesure
Ici, ce que le marché doit faire, c'est trier les produits de la manière la plus précise et la plus objective pour les clients.
Il y a quelques problèmes de mesure rencontrés lors de cette opération.
Dans cette première partie de la série, nous aborderons la question de la notation des produits.
- Évaluation des produits
*Moyenne
* Moyenne pondérée basée sur le temps
* Moyenne pondérée basée sur l'utilisateur
*Note pondérée
Je vais essayer d'expliquer les méthodes mentionnées ci-dessus que nous utiliserons pour l'évaluation des produits avec un exemple.
Dans cet exemple, nous examinerons les évaluations d'un cours en ligne.
Installer et importer
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()
Il peut y avoir une augmentation ou une diminution des scores en ce moment, cela doit également être évalué.
Dans ce cas, nous devrions utiliser la moyenne pondérée basée sur le temps pour évaluer également d'autres situations.
* Moyenne pondérée basée sur le temps
Convertissons la variable 'Timestamp' en variable de temps
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)
* Moyenne pondérée basée sur l'utilisateur
Les notes des utilisateurs qui ont regardé le cours à des tarifs différents doivent être évaluées avec des pondérations différentes :
df.groupby('Progress').agg({'Rating': 'mean'})
Pour calculer le score pondéré avec le statut de visionnage du cours :
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)
*Note pondérée
Nous combinerons les calculs de la moyenne pondérée basée sur le temps et de la moyenne pondérée basée sur l'utilisateur dans une seule fonction.
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)
Conclusion
Dans cet article, j'ai expliqué des choses qui nous aideront à décider quand nous voulons acheter un produit, et nous avons vu les problèmes de mesure qui peuvent survenir lorsque nous voulons trier les produits de la manière la plus précise et la plus objective.
Dans le prochain article, nous aborderons la question du tri des produits.
Convainquez et vous serez convaincus !
Meilleur, Neslihan
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































