ภาพรวมบทเรียน
การวิเคราะห์ข้อมูลเชิงสถิติในงานเหมืองข้อมูล คือการใช้เครื่องมือและเทคนิคทางสถิติเพื่ออธิบาย ตรวจสอบ และค้นหารูปแบบจากข้อมูลจำนวนมาก ก่อนนำไปสู่การสร้างโมเดล การทำนาย และการตัดสินใจเชิงธุรกิจ
บทเรียนนี้อ้างอิงจากสไลด์บทที่ 4 ซึ่งจัดวางเนื้อหาเป็นลำดับตั้งแต่การทบทวนข้อมูลและการเตรียมข้อมูล ไปจนถึง 5 เทคนิคสำคัญ ได้แก่ การวิเคราะห์ความถี่ การวิเคราะห์การกระจาย การวิเคราะห์ความสัมพันธ์ การวิเคราะห์การแปรปรวน และการวิเคราะห์แนวโน้ม
Learning Objectives
หลังเรียนบทนี้ ผู้เรียนควรสามารถเลือกใช้เทคนิคเชิงสถิติให้เหมาะกับปัญหาเหมืองข้อมูล และเขียน Python เพื่อวิเคราะห์ข้อมูลเบื้องต้นได้
Roadmap บทที่ 4 จากสถิติพื้นฐานสู่ Data Mining
ทบทวน: CRISP-DM 6 ขั้นตอน
CRISP-DM หรือ Cross-industry standard process for data mining เป็นกระบวนการมาตรฐานสำหรับทำเหมืองข้อมูล ประกอบด้วย 6 ขั้นตอน ได้แก่ Business Understanding, Data Understanding, Data Preparation, Modeling, Evaluation และ Deployment
Business Understanding
ทำความเข้าใจปัญหา วัตถุประสงค์ และเป้าหมายทางธุรกิจ เช่น เพิ่มยอดขาย แบ่งกลุ่มลูกค้า หรือทำนายความเสี่ยง
Data Understanding
รวบรวมข้อมูล ตรวจสอบคุณภาพ ความน่าเชื่อถือ ปริมาณข้อมูล และความเหมาะสมต่อการวิเคราะห์
Data Preparation
คัดเลือกข้อมูล ทำความสะอาด แปลงข้อมูล และเตรียมให้พร้อมสำหรับโมเดล
Modeling
เลือกเทคนิคหรือโมเดลที่เหมาะสม ทดลอง ปรับพารามิเตอร์ และเปรียบเทียบผลลัพธ์
Evaluation
วัดประสิทธิภาพของโมเดลว่าเพียงพอสำหรับนำไปใช้งานจริงหรือไม่
Deployment
นำโมเดลที่เหมาะสมไปใช้งานจริง พร้อมติดตามและปรับปรุงต่อเนื่อง
4.1 ความหมายของเทคนิคเชิงสถิติ
เทคนิคเชิงสถิติ (Statistical Techniques) ในงานเหมืองข้อมูล คือชุดวิธีการที่ใช้วิเคราะห์และอธิบายข้อมูล เพื่อตรวจสอบความสัมพันธ์ การทำนาย และการค้นหารูปแบบที่ซ่อนอยู่ในข้อมูล ผลลัพธ์จากเทคนิคเหล่านี้ช่วยสนับสนุนการตัดสินใจและการสร้างโมเดลในขั้นตอนต่อไป
4.2 เทคนิคเชิงสถิติที่ใช้สำหรับเหมืองข้อมูล
| เทคนิค | จุดประสงค์ | ตัวอย่างการใช้งาน |
|---|---|---|
| Frequency Analysis | นับความถี่ของค่าแต่ละประเภท | สินค้าใดถูกซื้อมากที่สุด |
| Distribution Analysis | ดูรูปแบบการกระจายของข้อมูล | คะแนนสอบกระจายแบบปกติหรือไม่ |
| Relational Analysis | ศึกษาความสัมพันธ์ระหว่างตัวแปร | อายุสัมพันธ์กับยอดซื้อหรือไม่ |
| Variation Analysis | ดูความผันผวนหรือความแตกต่างจากค่าคาดหมาย | รายได้จริงต่างจากงบประมาณเท่าใด |
| Trend Analysis | วิเคราะห์ทิศทางการเปลี่ยนแปลงตามเวลา | ยอดขายรายเดือนเพิ่มขึ้นหรือลดลง |
4.2.1 การวิเคราะห์ความถี่ (Frequency Analysis)
การวิเคราะห์ความถี่ คือการวิเคราะห์จำนวนครั้งที่ข้อมูลแต่ละค่าปรากฏในชุดข้อมูล ใช้ได้ทั้งข้อมูลตัวเลขและข้อความ เช่น คะแนนสอบ เพศ หมวดสินค้า หรือประเภทลูกค้า เป็นเทคนิคพื้นฐานที่ช่วยให้เข้าใจภาพรวมของข้อมูลและเตรียมข้อมูลสำหรับการวิเคราะห์ขั้นต่อไป
Frequency Table → Bar Chart → Interpretation
import pandas as pd
scores = [75, 82, 88, 92, 75, 82, 88, 95, 82, 92, 92, 88, 75, 82]
df = pd.DataFrame({"คะแนน": scores})
frequency_table = df["คะแนน"].value_counts().reset_index()
frequency_table.columns = ["คะแนน", "จำนวนครั้ง"]
frequency_table = frequency_table.sort_values(by="คะแนน")
print(frequency_table)import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "Tahoma" # หรือ TH Sarabun New
plt.bar(frequency_table["คะแนน"], frequency_table["จำนวนครั้ง"])
plt.xlabel("คะแนน")
plt.ylabel("จำนวนครั้ง")
plt.title("กราฟความถี่ของคะแนนการทดสอบ")
plt.show()ข้อควรระวัง: หากใช้ value_counts() ค่าจะเรียงตามจำนวนครั้งจากมากไปน้อยโดยอัตโนมัติ หากต้องการวาดกราฟเส้นตามลำดับคะแนน ควรใช้ sort_values(by="คะแนน") ก่อน plot
4.2.2 การวิเคราะห์การกระจาย (Distribution Analysis)
การวิเคราะห์การกระจายช่วยให้เข้าใจว่าข้อมูลกระจุกตัว กระจายกว้าง เบ้ไปทางใด หรือมีค่าผิดปกติหรือไม่ ตัวชี้วัดที่ใช้บ่อย ได้แก่ Mean, Median, Standard Deviation, Variance, Skewness, Kurtosis, Quartile และ Outliers
Skewness
วัดความเบ้ของข้อมูล ค่าใกล้ 0 คือค่อนข้างสมมาตร มากกว่า 0 คือเบ้ขวา น้อยกว่า 0 คือเบ้ซ้าย
Kurtosis
วัดความแหลมหรือความหนักของหาง หากสูงมากอาจสะท้อนว่ามี outlier หรือหางหนากว่าปกติ
Outliers
ค่าที่ห่างจากกลุ่มข้อมูลทั่วไป อาจเป็นข้อผิดพลาดหรือข้อมูลที่มีความหมายพิเศษ
Normal Distribution
ข้อมูลมีรูปทรงคล้ายระฆังคว่ำ ค่าเฉลี่ยมักอยู่ใกล้กึ่งกลาง และใช้เป็นพื้นฐานในการวิเคราะห์สถิติหลายแบบ
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(42)
data = np.random.normal(loc=0, scale=1, size=1000)
outliers = np.array([8, 10, -7, -6])
data = np.concatenate([data, outliers])
df = pd.DataFrame({"Data": data})
print("Skewness:", df["Data"].skew())
print("Kurtosis:", df["Data"].kurtosis())
plt.hist(df["Data"], bins=30)
plt.title("Histogram of Data with Outliers")
plt.show()
plt.boxplot(df["Data"], vert=False)
plt.title("Boxplot of Data with Outliers")
plt.show()จากสไลด์ ตัวอย่างค่า Skewness เป็นบวกแปลว่าข้อมูลมีหางไปทางขวา และค่า Kurtosis สูงสะท้อนว่าข้อมูลมีหางหนักหรือมี outlier มากกว่าปกติ การพล็อต Histogram และ Boxplot ช่วยให้เห็นรูปแบบนี้ได้ชัดเจน
4.2.3 การวิเคราะห์ความสัมพันธ์ (Relational Analysis)
การวิเคราะห์ความสัมพันธ์ใช้ศึกษาและวิเคราะห์ความสัมพันธ์ระหว่างตัวแปร เช่น ความสัมพันธ์ระหว่างอายุกับยอดซื้อ จำนวนสินค้ากับยอดขาย หรือชั่วโมงเรียนกับคะแนนสอบ โดยเทคนิคที่สำคัญ ได้แก่ Correlation, Hypothesis Testing, Linear Regression และ Variance Analysis
Correlation
| ค่า Correlation | ความหมาย |
|---|---|
| ใกล้ 1 | มีความสัมพันธ์เชิงบวกสูง |
| ใกล้ -1 | มีความสัมพันธ์เชิงลบสูง |
| ใกล้ 0 | แทบไม่มีความสัมพันธ์เชิงเส้น |
import pandas as pd
correlation = df[["Age", "Quantity", "Price", "Total", "Satisfaction"]].corr()
print(correlation)Hypothesis Testing
การทดสอบสมมุติฐานใช้เพื่อตรวจสอบว่าความแตกต่างหรือความสัมพันธ์ที่พบมีนัยสำคัญทางสถิติหรือไม่ เช่น เปรียบเทียบยอดซื้อเฉลี่ยของลูกค้าสองกลุ่ม หรือทดสอบความสัมพันธ์ระหว่างตัวแปร
from scipy import stats
group_a = [120, 150, 130, 160, 140]
group_b = [100, 110, 115, 105, 120]
t_stat, p_value = stats.ttest_ind(group_a, group_b)
alpha = 0.05
print("t-statistic:", t_stat)
print("p-value:", p_value)
if p_value < alpha:
print("Reject the null hypothesis")
else:
print("Fail to reject the null hypothesis")Linear Regression
Linear Regression ใช้วิเคราะห์ความสัมพันธ์ระหว่างตัวแปรอิสระและตัวแปรตาม โดยหาเส้นตรงที่เหมาะสมที่สุดเพื่อทำนายค่าของตัวแปรตามจากตัวแปรอิสระ
import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([82, 84, 86, 88, 90])
model = LinearRegression()
model.fit(X, y)
hours_to_predict = np.array([6, 7, 8]).reshape(-1, 1)
predicted_scores = model.predict(hours_to_predict)
for h, score in zip(hours_to_predict, predicted_scores):
print(f"จำนวนชั่วโมงที่เรียน: {h[0]}, คะแนนทำนาย: {score:.2f}")ต้องการต่อยอดจากสถิติเป็น Dashboard หรือโมเดลจริง?
Siam2Dev ช่วยออกแบบชุดข้อมูล วิเคราะห์เชิงสถิติ สร้างโมเดล Data Mining และทำ Dashboard สำหรับงานวิจัย ธุรกิจ และการเรียนการสอน
4.2.4 การวิเคราะห์การแปรปรวน (Variation Analysis)
การวิเคราะห์การแปรปรวนใช้ศึกษาความแตกต่างหรือความผันผวนของข้อมูล เช่น รายได้จริงเทียบกับงบประมาณ ยอดขายรายเดือน หรือคะแนนของนักเรียนในแต่ละกลุ่ม ช่วยให้เห็นว่าความแตกต่างนั้นเป็นผลดี ผลเสีย หรือควรตรวจสอบเพิ่มเติม
import pandas as pd
data = {
"Month": ["January", "February", "March", "April", "May"],
"Actual_Revenue": [100, 120, 110, 105, 130],
"Budget_Revenue": [110, 115, 120, 100, 125]
}
df = pd.DataFrame(data)
df["Variance"] = df["Actual_Revenue"] - df["Budget_Revenue"]
df["Direction"] = ["Favorable" if var >= 0 else "Unfavorable" for var in df["Variance"]]
print(df)การตีความ Variation ควรดูทั้งขนาดของความต่างและบริบท เช่น รายได้จริงสูงกว่างบประมาณอาจเป็นผลดี แต่ต้นทุนจริงสูงกว่างบประมาณอาจเป็นผลเสีย
4.2.5 การวิเคราะห์แนวโน้ม (Trend Analysis)
Trend Analysis คือการวิเคราะห์ข้อมูลตามเวลาเพื่อดูทิศทางการเปลี่ยนแปลง เช่น ยอดขายรายเดือน จำนวนผู้เข้าเว็บไซต์ ราคาสินค้า หรือข้อมูลเซนเซอร์ IoT ที่เปลี่ยนแปลงต่อเนื่อง
Trend Chart
import matplotlib.pyplot as plt
import numpy as np
time = np.arange(1, 11)
data = np.array([5, 7, 9, 12, 15, 18, 22, 25, 28, 32])
plt.plot(time, data, marker="o", linestyle="-")
plt.title("Trend Chart Example")
plt.xlabel("Time")
plt.ylabel("Data")
plt.grid(True)
plt.show()กรณีศึกษา: วิเคราะห์พฤติกรรมการซื้อสินค้า
สไลด์บทที่ 4 ใช้กรณีศึกษาพฤติกรรมการซื้อสินค้าเพื่อแสดงการวิเคราะห์เชิงสถิติ เช่น การนับความถี่สินค้า การหาค่าเฉลี่ย ค่าสูงสุด ค่าต่ำสุด การวิเคราะห์ช่วงอายุ การวิเคราะห์ความสัมพันธ์ การจัดกลุ่ม และการตรวจ outlier
import pandas as pd
import matplotlib.pyplot as plt
data = {
"CustomerID": ["C001","C002","C003","C004","C005","C006","C007","C008","C009","C010"],
"Gender": ["Female","Male","Female","Male","Female","Male","Female","Male","Female","Male"],
"Age": [22, 35, 28, 40, 31, 25, 45, 30, 27, 38],
"Product": ["Coffee","Tea","Coffee","Cake","Tea","Coffee","Cake","Coffee","Tea","Cake"],
"Quantity": [2, 1, 3, 2, 4, 1, 3, 2, 2, 1],
"Price": [60, 45, 60, 80, 45, 60, 80, 60, 45, 80],
"Satisfaction": [5, 4, 5, 3, 4, 5, 2, 4, 5, 3]
}
df = pd.DataFrame(data)
df["Total"] = df["Quantity"] * df["Price"]
print("ความถี่ของสินค้า")
print(df["Product"].value_counts())
print("ค่าสถิติพื้นฐาน")
print(df.describe())
bins = [20, 30, 40, 50]
labels = ["20-30 ปี", "31-40 ปี", "41-50 ปี"]
df["AgeGroup"] = pd.cut(df["Age"], bins=bins, labels=labels, include_lowest=True)
print(df["AgeGroup"].value_counts().sort_index())
print("ยอดขายรวมตามสินค้า")
print(df.groupby("Product")["Total"].sum())
print("ความพึงพอใจเฉลี่ยตามสินค้า")
print(df.groupby("Product")["Satisfaction"].mean())groupby("Product")["Total"].sum() จะช่วยให้เห็นว่าสินค้าใดสร้างรายได้สูงสุดจริง ซึ่งอาจไม่ใช่สินค้าที่ถูกซื้อบ่อยที่สุดเสมอไปChecklist การวิเคราะห์ข้อมูลเชิงสถิติ
เริ่มจากโจทย์
รู้ว่าต้องการตอบคำถามอะไร เช่น ใครซื้อบ่อย สินค้าใดขายดี หรือยอดขายมีแนวโน้มอย่างไร
ตรวจข้อมูล
ดู Missing, Duplicate, Outliers และความถูกต้องของชนิดข้อมูลก่อนวิเคราะห์
เลือกสถิติให้เหมาะ
ใช้ Frequency กับข้อมูลกลุ่ม ใช้ Distribution กับตัวเลข ใช้ Correlation กับความสัมพันธ์
แปลผลเป็นภาษาคน
ไม่รายงานแค่ตัวเลข แต่ต้องบอกความหมาย ข้อจำกัด และแนวทางตัดสินใจ
แบบฝึกหัดท้ายบท
- อธิบายความหมายของเทคนิคเชิงสถิติในงานเหมืองข้อมูล และยกตัวอย่างการใช้งาน 3 ตัวอย่าง
- สร้างตารางความถี่จากชุดข้อมูลคะแนนสอบ และแสดงผลด้วย Bar Chart
- คำนวณ Mean, Median, Mode, Variance และ Standard Deviation จากข้อมูลยอดขาย
- สร้าง Histogram และ Boxplot เพื่อตรวจสอบการกระจายและ Outliers
- อธิบายความหมายของ Skewness และ Kurtosis พร้อมตัวอย่างการแปลผล
- สร้าง Correlation Matrix จากข้อมูลลูกค้า และอธิบายตัวแปรที่สัมพันธ์กันมากที่สุด
- เขียนโปรแกรม Linear Regression อย่างง่ายเพื่อทำนายคะแนนจากจำนวนชั่วโมงเรียน
- วิเคราะห์ Variance ระหว่าง Actual Revenue และ Budget Revenue พร้อมแปลผล
- สร้าง Trend Chart จากข้อมูลรายเดือน และอธิบายแนวโน้มที่พบ
- ออกแบบหัวข้อโครงงานสั้น ๆ ที่ใช้ Frequency, Distribution, Correlation และ Trend Analysis ร่วมกัน