측정 문제 — 1
이 기사를 통해 데이터 과학 분야에서 중요한 위치를 차지하는 측정 문제에 대한 새로운 미니 시리즈를 시작하겠습니다.
이 시리즈는 세 가지 주요 타이틀로 구성됩니다.
- 제품 평가
- 제품 분류
- 리뷰 정렬
제품을 구매하기로 결정했다고 가정해 보겠습니다. 인터넷에서 사고 싶은 제품을 검색하면 많은 옵션이 있음을 알 수 있습니다.
그렇다면 그러한 상황에서 우리가 결정하는 데 도움이 되는 것은 무엇입니까?
사회적 증거
사회적 증거는 다른 사람의 행동을 모방하는 행위입니다. 즉, 우리는 제품을 구매하기로 결정할 때 다른 사람들의 댓글과 평가를 보고 어떤 것을 고를지 고민하며 이것이 제품 구매에 영향을 미칩니다.
물론 이 정의를 심리학적으로 설명할 수는 없지만 기본적으로 모든 사람이 인정하는 것을 얻으면 편안함을 느끼게 된다고 말할 수 있을 것 같습니다.
사회적 증명이라는 용어는 Robert Cialdini가 1984년에 출판한 그의 책 에서 제시되었습니다 .
이것은 우리에게 또 다른 정의를 가져다줍니다.
군중의 지혜
수많은 상품 중에 저 상품을 다들 사셨다면 나도 저 상품을 사야겠다는 마음. 왜냐하면 왜 안되고 나는 너무 많이 생각하고 싶지 않기 때문입니다!
측정 문제
여기서 마켓플레이스가 해야 할 일은 고객을 위해 가장 정확하고 객관적인 방식으로 제품을 분류하는 것입니다.
이 작업을 수행하는 동안 몇 가지 측정 문제가 발생합니다.
이 시리즈의 첫 번째 부분에서는 제품 평가 문제를 다룰 것입니다.
- 제품 평가
*평균
*시간 기반 가중 평균
*사용자 기반 가중 평균
*가중 등급
위에서 언급한 제품 평가 방법을 예를 들어 설명하겠습니다.
이 예에서는 온라인 과정의 등급을 검토합니다.
설치 및 가져오기
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()
현재 점수가 증가하거나 감소할 수 있으며 이 또한 평가되어야 합니다.
이 경우 시간 기반 가중 평균을 사용하여 다른 상황도 평가해야 합니다.
*시간 기반 가중 평균
'Timestamp' 변수를 시간 변수로 변환해 봅시다.
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)
*사용자 기반 가중 평균
다른 속도로 코스를 시청한 사용자의 등급은 다른 가중치로 평가되어야 합니다.
df.groupby('Progress').agg({'Rating': 'mean'})
코스 보기 상태로 가중 점수를 계산하려면 다음을 수행하십시오.
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)
*가중 등급
시간 기반 가중 평균 및 사용자 기반 가중 평균 계산을 단일 함수로 결합합니다.
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)
결론
이번 글에서는 우리가 언제 제품을 사고 싶은지 결정하는 데 도움이 될 것들을 설명했고, 가장 정확하고 객관적인 방법으로 제품을 분류하고 싶을 때 발생할 수 있는 계량 문제들을 살펴보았다.
다음 기사에서는 제품 정렬 문제를 다룰 것입니다.
확신하라 그러면 너희도 확신하게 될 것이다!
최고, 네슬리한

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































