ปรึกษา Data Mining
Data Mining 4124305 • Chapter 04

บทที่ 4 การวิเคราะห์ข้อมูลเชิงสถิติในงานเหมืองข้อมูล

เรียนรู้การใช้เทคนิคเชิงสถิติในการอธิบายข้อมูล ค้นหารูปแบบที่ซ่อนอยู่ ตรวจสอบความสัมพันธ์ วิเคราะห์ความแปรปรวน และดูแนวโน้มของข้อมูล เพื่อเตรียมเข้าสู่การสร้างโมเดลเหมืองข้อมูล

Frequency Distribution Correlation Hypothesis Regression Trend

สาระสำคัญจากสไลด์

  • ทบทวน CRISP-DM และบทบาทของสถิติ
  • Frequency, Distribution, Relational Analysis
  • Variation และ Trend Analysis
  • ตัวอย่าง Python: Pandas, NumPy, Matplotlib, Seaborn
ปรับจากสไลด์บทที่ 4
มีตัวอย่าง Python
เชื่อมโยง CRISP-DM
นำไปทำโครงงานได้

ภาพรวมบทเรียน

การวิเคราะห์ข้อมูลเชิงสถิติในงานเหมืองข้อมูล คือการใช้เครื่องมือและเทคนิคทางสถิติเพื่ออธิบาย ตรวจสอบ และค้นหารูปแบบจากข้อมูลจำนวนมาก ก่อนนำไปสู่การสร้างโมเดล การทำนาย และการตัดสินใจเชิงธุรกิจ

บทเรียนนี้อ้างอิงจากสไลด์บทที่ 4 ซึ่งจัดวางเนื้อหาเป็นลำดับตั้งแต่การทบทวนข้อมูลและการเตรียมข้อมูล ไปจนถึง 5 เทคนิคสำคัญ ได้แก่ การวิเคราะห์ความถี่ การวิเคราะห์การกระจาย การวิเคราะห์ความสัมพันธ์ การวิเคราะห์การแปรปรวน และการวิเคราะห์แนวโน้ม

Learning Objectives

หลังเรียนบทนี้ ผู้เรียนควรสามารถเลือกใช้เทคนิคเชิงสถิติให้เหมาะกับปัญหาเหมืองข้อมูล และเขียน Python เพื่อวิเคราะห์ข้อมูลเบื้องต้นได้

อธิบายบทบาทของสถิติในกระบวนการ Data Mining และ CRISP-DM ได้
สร้างตารางความถี่ กราฟความถี่ และค่าสถิติเบื้องต้นได้
วิเคราะห์การกระจายด้วย Skewness, Kurtosis และ Outliers ได้
วิเคราะห์ Correlation, Hypothesis Testing, Linear Regression, Variance และ Trend ได้

Roadmap บทที่ 4 จากสถิติพื้นฐานสู่ Data Mining

Frequencyนับความถี่ Distributionดูการกระจาย Relationหาความสัมพันธ์ Variationผันผวน Trendแนวโน้ม ผลลัพธ์: เข้าใจข้อมูล → เลือกโมเดลเหมาะสม → ตัดสินใจได้ดีขึ้น

ทบทวน: 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

นำโมเดลที่เหมาะสมไปใช้งานจริง พร้อมติดตามและปรับปรุงต่อเนื่อง

ข้อคิดจากสไลด์: หากโมเดลยังไม่ดีพอ สามารถย้อนกลับไปเตรียมข้อมูลใหม่ได้ เพราะ “Garbage in, Garbage out” ข้อมูลไม่ดีจะทำให้ผลลัพธ์ไม่ดี แม้ใช้โมเดลที่ซับซ้อนก็ตาม

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

Frequency Table 75: 3 ครั้ง 82: 4 ครั้ง 88: 3 ครั้ง Graph 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 ใช้วิเคราะห์ความสัมพันธ์ระหว่างตัวแปรอิสระและตัวแปรตาม โดยหาเส้นตรงที่เหมาะสมที่สุดเพื่อทำนายค่าของตัวแปรตามจากตัวแปรอิสระ

y = mx + b y = ตัวแปรตาม x = ตัวแปรอิสระ m = ความชัน b = จุดตัดแกน y
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())
การแปลผลตัวอย่าง: หาก Coffee ถูกซื้อบ่อยที่สุด แสดงว่าเป็นสินค้ายอดนิยม แต่การดูยอดขายรวมด้วย groupby("Product")["Total"].sum() จะช่วยให้เห็นว่าสินค้าใดสร้างรายได้สูงสุดจริง ซึ่งอาจไม่ใช่สินค้าที่ถูกซื้อบ่อยที่สุดเสมอไป

Checklist การวิเคราะห์ข้อมูลเชิงสถิติ

เริ่มจากโจทย์

รู้ว่าต้องการตอบคำถามอะไร เช่น ใครซื้อบ่อย สินค้าใดขายดี หรือยอดขายมีแนวโน้มอย่างไร

ตรวจข้อมูล

ดู Missing, Duplicate, Outliers และความถูกต้องของชนิดข้อมูลก่อนวิเคราะห์

เลือกสถิติให้เหมาะ

ใช้ Frequency กับข้อมูลกลุ่ม ใช้ Distribution กับตัวเลข ใช้ Correlation กับความสัมพันธ์

แปลผลเป็นภาษาคน

ไม่รายงานแค่ตัวเลข แต่ต้องบอกความหมาย ข้อจำกัด และแนวทางตัดสินใจ

แบบฝึกหัดท้ายบท

  1. อธิบายความหมายของเทคนิคเชิงสถิติในงานเหมืองข้อมูล และยกตัวอย่างการใช้งาน 3 ตัวอย่าง
  2. สร้างตารางความถี่จากชุดข้อมูลคะแนนสอบ และแสดงผลด้วย Bar Chart
  3. คำนวณ Mean, Median, Mode, Variance และ Standard Deviation จากข้อมูลยอดขาย
  4. สร้าง Histogram และ Boxplot เพื่อตรวจสอบการกระจายและ Outliers
  5. อธิบายความหมายของ Skewness และ Kurtosis พร้อมตัวอย่างการแปลผล
  6. สร้าง Correlation Matrix จากข้อมูลลูกค้า และอธิบายตัวแปรที่สัมพันธ์กันมากที่สุด
  7. เขียนโปรแกรม Linear Regression อย่างง่ายเพื่อทำนายคะแนนจากจำนวนชั่วโมงเรียน
  8. วิเคราะห์ Variance ระหว่าง Actual Revenue และ Budget Revenue พร้อมแปลผล
  9. สร้าง Trend Chart จากข้อมูลรายเดือน และอธิบายแนวโน้มที่พบ
  10. ออกแบบหัวข้อโครงงานสั้น ๆ ที่ใช้ Frequency, Distribution, Correlation และ Trend Analysis ร่วมกัน

คำถามที่พบบ่อยเกี่ยวกับบทที่ 4

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

Frequency Analysis เน้นนับจำนวนครั้งที่ค่าปรากฏ ส่วน Distribution Analysis เน้นดูรูปแบบการกระจายของข้อมูล เช่น สมมาตร เบ้ซ้าย เบ้ขวา กระจายมาก หรือมี outlier

ไม่จำเป็น Correlation บอกว่าตัวแปรเปลี่ยนแปลงสัมพันธ์กัน แต่ไม่ได้พิสูจน์เหตุและผล ต้องใช้การออกแบบการศึกษาและการวิเคราะห์เพิ่มเติม

เหมาะกับข้อมูลที่มีมิติเวลา เช่น ยอดขายรายเดือน จำนวนผู้เข้าเว็บไซต์ ราคาสินค้า อุณหภูมิ หรือค่าจากเซนเซอร์ IoT ที่ต้องการดูทิศทางการเปลี่ยนแปลง
อ่านต่อ

ต่อยอดบทเรียนเหมืองข้อมูล

หลังเข้าใจการวิเคราะห์เชิงสถิติแล้ว สามารถเรียนต่อเรื่องกฎความสัมพันธ์และการจำแนกข้อมูลได้