ปัญหาการวัด — 1

Mar 20 2023
ในบทความนี้ ฉันจะเริ่มต้นซีรี่ส์ใหม่เกี่ยวกับปัญหาการวัดซึ่งมีสถานที่สำคัญในสาขาวิทยาศาสตร์ข้อมูล ชุดนี้จะประกอบด้วยสามชื่อหลัก: สมมติว่าเราตัดสินใจซื้อสินค้า

ในบทความนี้ ฉันจะเริ่มต้นซีรี่ส์ใหม่เกี่ยวกับปัญหาการวัดซึ่งมีสถานที่สำคัญในสาขาวิทยาศาสตร์ข้อมูล

ซีรีส์นี้จะประกอบด้วยสามชื่อหลัก:

  • ให้คะแนนผลิตภัณฑ์
  • คัดแยกสินค้า
  • การจัดเรียงรีวิว

สมมติว่าเราตัดสินใจซื้อสินค้า เวลาเราค้นหาสินค้าที่ต้องการซื้อทางอินเตอร์เน็ตจะเห็นว่ามีตัวเลือกมากมาย

แล้วอะไรคือสิ่งที่จะช่วยเราตัดสินใจในสถานการณ์เช่นนี้?

หลักฐานทางสังคม

หลักฐานทางสังคมคือการคัดลอกพฤติกรรมของผู้อื่น นั่นคือ เมื่อเราตัดสินใจซื้อสินค้า เราจะดูความคิดเห็นและการประเมินของผู้อื่นในขณะที่พิจารณาว่าจะเลือกผลิตภัณฑ์ใด และสิ่งนี้ส่งผลต่อเราเมื่อซื้อสินค้า

แน่นอน ฉันไม่สามารถอธิบายคำจำกัดความนี้ในเชิงจิตวิทยาได้ แต่ฉันเดาว่าฉันสามารถพูดได้ว่าโดยพื้นฐานแล้วการได้รับสิ่งที่ทุกคนยอมรับทำให้เรารู้สึกอยู่ในโซนสบาย

คำว่า Social Proof ถูกนำมาใช้ในหนังสือ ของเขา ที่ตีพิมพ์ในปี 1984 โดย Robert Cialdini

สิ่งนี้นำเราไปสู่คำจำกัดความอื่น:

ภูมิปัญญาของฝูงชน

ความรู้สึกที่ว่าถ้าทุกคนซื้อสินค้านั้นท่ามกลางสินค้ามากมาย ฉันก็ควรซื้อแบบนั้นเหมือนกัน เพราะอะไรถึงไม่อยากคิดมาก!

เชื่อแล้วคุณจะเชื่อ!

ปัญหาการวัด

ที่นี่ สิ่งที่ตลาดต้องทำคือการจัดเรียงผลิตภัณฑ์ด้วยวิธีที่ถูกต้องและตรงเป้าหมายที่สุดสำหรับลูกค้า

มีปัญหาการวัดบางอย่างที่พบขณะดำเนินการนี้

ในส่วนแรกของซีรีส์นี้ เราจะกล่าวถึงปัญหาของการให้คะแนนผลิตภัณฑ์

  • ให้คะแนนผลิตภัณฑ์

*เฉลี่ย

*ถัวเฉลี่ยถ่วงน้ำหนักตามเวลา

*ค่าเฉลี่ยถ่วงน้ำหนักตามผู้ใช้

* คะแนนถ่วงน้ำหนัก

ฉันจะพยายามอธิบายวิธีการดังกล่าวข้างต้นที่เราจะใช้ในการให้คะแนนผลิตภัณฑ์ด้วยตัวอย่าง

ในตัวอย่างนี้ เราจะตรวจสอบการให้คะแนนของหลักสูตรออนไลน์

ติดตั้งและนำเข้า

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()

อาจมีคะแนนเพิ่มขึ้นหรือลดลงในขณะนี้ควรได้รับการประเมินด้วย

ในกรณีนี้ เราควรใช้ Time-Based Weighted Average เพื่อประเมินสถานการณ์อื่นๆ ด้วย

*ถัวเฉลี่ยถ่วงน้ำหนักตามเวลา

ลองแปลงตัวแปร '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)

บทสรุป

ในบทความนี้ ฉันได้อธิบายสิ่งต่าง ๆ ที่จะช่วยเราตัดสินใจเมื่อเราต้องการซื้อผลิตภัณฑ์ และเราได้เห็นปัญหาการวัดที่สามารถเกิดขึ้นเมื่อเราต้องการจัดเรียงผลิตภัณฑ์ด้วยวิธีที่ถูกต้องและเป็นกลางที่สุด

ในบทความหน้าเราจะพูดถึงเรื่องการคัดแยกสินค้า

เชื่อแล้วคุณจะเชื่อ!

ดีที่สุดเนสลิฮาน