ปรึกษา Data Mining
บทที่ 4 • Statistical Data Analysis for Data Mining

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

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

หัวข้อหลักของบทนี้

  • Frequency และ Distribution Analysis
  • Correlation, Hypothesis Testing และ Regression
  • Variation, Outlier และ Trend Analysis
  • ตัวอย่าง Python สำหรับงานเหมืองข้อมูล

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

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

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

ทำไมสถิติจึงสำคัญต่อ Data Mining?

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

ทบทวน CRISP-DM กับบทบาทของสถิติ

CRISP-DM เป็นกระบวนการมาตรฐานสำหรับการทำเหมืองข้อมูล ประกอบด้วย 6 ขั้นตอน ได้แก่ Business Understanding, Data Understanding, Data Preparation, Modeling, Evaluation และ Deployment โดยสถิติจะเข้าไปช่วยแทบทุกขั้นตอน โดยเฉพาะการทำความเข้าใจข้อมูล การเตรียมข้อมูล การประเมินโมเดล และการนำผลลัพธ์ไปใช้งาน

Business Understanding

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

Data Understanding

ใช้สถิติเบื้องต้นสำรวจข้อมูล เช่น จำนวนข้อมูล ค่าเฉลี่ย ความถี่ ค่าที่หาย และค่าผิดปกติ

Data Preparation

เลือกข้อมูล ทำความสะอาด แปลงข้อมูล และสร้างตัวแปรใหม่ให้พร้อมสำหรับการวิเคราะห์

Modeling & Evaluation

สร้างโมเดลและประเมินผล เช่น Accuracy, Error, Correlation, p-value หรือค่าสถิติที่เกี่ยวข้อง

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

4.1 ความหมายของเทคนิคเชิงสถิติ

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

เทคนิคจุดประสงค์ตัวอย่างการใช้งาน
Frequency Analysisวิเคราะห์ความถี่สินค้าชนิดใดถูกซื้อบ่อยที่สุด
Distribution Analysisวิเคราะห์การกระจายคะแนนสอบกระจายตัวอย่างไร มี outlier หรือไม่
Relational Analysisวิเคราะห์ความสัมพันธ์อายุสัมพันธ์กับยอดซื้อหรือไม่
Variation Analysisวิเคราะห์ความแปรปรวนยอดขายแต่ละเดือนผันผวนมากน้อยเพียงใด
Trend Analysisวิเคราะห์แนวโน้มยอดขายมีแนวโน้มเพิ่มขึ้นหรือลดลง

4.2.1 การวิเคราะห์ความถี่ (Frequency Analysis)

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

วัตถุประสงค์ของ Frequency Analysis

  • เพื่อดูว่าค่าใดเกิดขึ้นบ่อยที่สุด เช่น สินค้าที่ลูกค้านิยมซื้อ
  • เพื่อสรุปลักษณะข้อมูลเบื้องต้น เช่น คะแนนส่วนใหญ่อยู่ช่วงใด
  • เพื่อช่วยตรวจสอบข้อมูลผิดปกติ เช่น ค่าที่เกิดน้อยมากหรือไม่ควรเกิด
  • เพื่อเตรียมข้อมูลสำหรับการวิเคราะห์ขั้นต่อไป เช่น Classification หรือ Association Rule

ขั้นตอนการวิเคราะห์ความถี่

สร้างตารางความถี่

นับค่าที่ปรากฏในข้อมูล เช่น คะแนน 82 ปรากฏกี่ครั้ง หรือสินค้า Coffee ถูกซื้อกี่ครั้ง

สร้างกราฟความถี่

ใช้ Bar Chart, Histogram, Pie Chart หรือ Line Chart เพื่อสื่อสารรูปแบบข้อมูลให้เข้าใจง่าย

คำนวณค่าสถิติเบื้องต้น

เช่น Mean, Median, Mode, Variance และ Standard Deviation

แปลผลและเปรียบเทียบ

สรุปว่าข้อมูลส่วนใหญ่เป็นอย่างไร กลุ่มใดเด่น และมีข้อสังเกตอะไรที่ควรนำไปใช้ต่อ

ตัวอย่าง Python: ตารางความถี่ของคะแนนสอบ

สมมติว่ามีคะแนนสอบของนักเรียนดังนี้: 75, 82, 88, 92, 75, 82, 88, 95, 82, 92, 92, 88, 75, 82

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)
คะแนนจำนวนครั้งการแปลผล
753พบ 3 ครั้ง
824พบมากที่สุดร่วมกับ 88
884พบมากที่สุดร่วมกับ 82
923พบ 3 ครั้ง
951พบเพียง 1 ครั้ง

ตัวอย่าง Python: กราฟความถี่

import pandas as pd
import matplotlib.pyplot as plt

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='คะแนน')

plt.rcParams['font.family'] = 'Tahoma'
plt.bar(frequency_table['คะแนน'], frequency_table['จำนวนครั้ง'])
plt.xlabel('คะแนน')
plt.ylabel('จำนวนครั้ง')
plt.title('กราฟความถี่ของคะแนนการทดสอบ')
plt.show()
ข้อควรระวัง: คำสั่ง value_counts() มักเรียงข้อมูลตามความถี่จากมากไปน้อย หากต้องการวาดกราฟเส้นตามลำดับคะแนน ควรใช้ sort_values(by='คะแนน') ก่อน plot

ค่าสถิติเบื้องต้นที่ใช้ร่วมกับความถี่

ค่าสถิติความหมายใช้ตอบคำถามอะไร
Meanค่าเฉลี่ยคะแนนหรือยอดซื้อเฉลี่ยเท่าใด
Medianค่ากลางค่ากลางของข้อมูลอยู่ที่ใด
Modeค่าที่พบบ่อยที่สุดสินค้าหรือคะแนนใดเกิดบ่อยที่สุด
Varianceความแปรปรวนข้อมูลกระจายมากน้อยเพียงใด
Standard Deviationส่วนเบี่ยงเบนมาตรฐานข้อมูลห่างจากค่าเฉลี่ยโดยเฉลี่ยมากน้อยเพียงใด

4.2.2 การวิเคราะห์การกระจาย (Distribution Analysis)

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

แนวคิดสำคัญ

Skewness

ใช้ดูความเบ้ของข้อมูล ถ้าเป็นบวกคือเบ้ขวา ถ้าเป็นลบคือเบ้ซ้าย ถ้าใกล้ 0 คือค่อนข้างสมมาตร

Kurtosis

ใช้ดูความแหลมหรือความหนักของหางข้อมูล ค่าสูงมักบ่งชี้ว่ามี outlier หรือหางหนา

Outliers

ค่าที่แตกต่างจากข้อมูลส่วนใหญ่มาก อาจเป็นข้อมูลผิดพลาดหรือกรณีพิเศษที่น่าสนใจ

Normal Distribution

ข้อมูลรูปทรงระฆังคว่ำ มีค่าเฉลี่ยอยู่ใกล้กึ่งกลาง และสมมาตรทั้งสองด้าน

ตัวอย่าง Python: วิเคราะห์ Skewness, Kurtosis และ Outlier

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

plt.hist(df['Data'], bins=30)
plt.title('Histogram of Data with Outliers')
plt.xlabel('Data Value')
plt.ylabel('Frequency')
plt.show()

print('Skewness:', df['Data'].skew())
print('Kurtosis:', df['Data'].kurtosis())

plt.boxplot(df['Data'], vert=False)
plt.title('Boxplot of Data with Outliers')
plt.show()
ผลลัพธ์ความหมาย
Skewness > 0ข้อมูลเบ้ขวา มีค่ามากผิดปกติทางขวา
Skewness < 0ข้อมูลเบ้ซ้าย มีค่าต่ำผิดปกติทางซ้าย
Kurtosis สูงข้อมูลมีหางหนา หรือมี outlier มากกว่าปกติ
Boxplot พบจุดนอก whiskerอาจเป็น outlier ที่ควรตรวจสอบเพิ่มเติม

การกระจายแบบปกติและแบบทวินาม

Normal Distribution เหมาะกับข้อมูลที่กระจายสมมาตร เช่น คะแนนสอบหรือค่าทางกายภาพบางประเภท ส่วน Binomial Distribution เหมาะกับการทดลองที่มีผลลัพธ์สองแบบ เช่น สำเร็จ/ไม่สำเร็จ ผ่าน/ไม่ผ่าน ซื้อ/ไม่ซื้อ

# ตัวอย่าง Binomial Distribution
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom

n = 10      # จำนวนครั้งที่ทดลอง
p = 0.5     # ความน่าจะเป็นของความสำเร็จ
x = np.arange(0, n + 1)
prob = binom.pmf(x, n, p)

plt.bar(x, prob)
plt.title('Binomial Distribution')
plt.xlabel('Number of Successes')
plt.ylabel('Probability')
plt.show()

4.2.3 การวิเคราะห์ความสัมพันธ์ (Relational Analysis)

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

Correlation Coefficient

ค่าสัมประสิทธิ์สหสัมพันธ์ หรือ correlation coefficient มักแทนด้วย r มีค่าอยู่ระหว่าง -1 ถึง 1

ค่า rความหมายตัวอย่าง
ใกล้ 1สัมพันธ์เชิงบวกสูงชั่วโมงเรียนเพิ่ม คะแนนสอบเพิ่ม
ใกล้ -1สัมพันธ์เชิงลบสูงอุณหภูมิเพิ่ม ความดันบางระบบลดลง
ใกล้ 0แทบไม่มีความสัมพันธ์เชิงเส้นตัวแปรเปลี่ยนโดยไม่สัมพันธ์กันชัดเจน
r = Σ((Xi - X̄)(Yi - Ȳ)) / √[Σ(Xi - X̄)² Σ(Yi - Ȳ)²]
import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])

r = np.corrcoef(x, y)[0, 1]
print('Correlation Coefficient:', r)
# ใช้ pandas
import pandas as pd

df = pd.DataFrame({'x': [1, 2, 3, 4, 5], 'y': [2, 4, 5, 4, 5]})
r = df['x'].corr(df['y'])
print('Correlation Coefficient:', r)
ข้อควรระวัง: Correlation บอกความสัมพันธ์ ไม่ได้ยืนยันเหตุและผลเสมอไป เช่น ตัวแปรสองตัวอาจสัมพันธ์กันเพราะมีตัวแปรอื่นซ่อนอยู่

การทดสอบสมมุติฐาน (Hypothesis Testing)

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

กำหนดสมมุติฐาน

H₀ คือสมมุติฐานว่าง เช่น ไม่มีความแตกต่าง ส่วน H₁ คือสมมุติฐานทางเลือก เช่น มีความแตกต่าง

กำหนดระดับนัยสำคัญ

นิยมใช้ α = 0.05 เพื่อกำหนดเกณฑ์การตัดสินใจ

คำนวณสถิติทดสอบและ p-value

ใช้สถิติ เช่น t-test, chi-square หรือ ANOVA ตามลักษณะข้อมูล

สรุปผล

ถ้า p-value < α ให้ปฏิเสธ H₀ ถ้า p-value ≥ α ยังไม่มีหลักฐานเพียงพอในการปฏิเสธ H₀

import numpy as np
from scipy import stats

np.random.seed(42)
sample_experiment = np.random.normal(loc=25, scale=5, size=30)
sample_control = np.random.normal(loc=20, scale=5, size=30)

t_statistic, p_value = stats.ttest_ind(sample_experiment, sample_control)
alpha = 0.05

print('t-statistic:', t_statistic)
print('p-value:', p_value)

if p_value < alpha:
    print('Reject the null hypothesis')
else:
    print('Fail to reject the null hypothesis')
ตัวอย่างข้อความสรุปผล: ผลการทดสอบด้วย Independent t-test พบว่า p-value น้อยกว่า 0.05 จึงปฏิเสธสมมุติฐานว่าง สรุปได้ว่าค่าเฉลี่ยของกลุ่มทดลองและกลุ่มควบคุมแตกต่างกันอย่างมีนัยสำคัญทางสถิติ

การวิเคราะห์เชิงเส้น (Linear Regression)

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

y = mx + b
  • y คือ ตัวแปรตาม เช่น คะแนนสอบ
  • x คือ ตัวแปรอิสระ เช่น จำนวนชั่วโมงที่เรียน
  • m คือ ความชันของเส้นตรง
  • b คือ จุดตัดแกน y
import numpy as np
import matplotlib.pyplot as plt
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}')

plt.scatter(X, y, label='ข้อมูลจริง')
plt.plot(X, model.predict(X), label='Regression Line')
plt.scatter(hours_to_predict, predicted_scores, label='ทำนาย')
plt.xlabel('จำนวนชั่วโมงที่เรียน')
plt.ylabel('คะแนนสอบ')
plt.title('Linear Regression')
plt.legend()
plt.show()

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

4.2.4 การวิเคราะห์การแปรปรวน (Variation Analysis)

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

ตัวชี้วัดความหมายการตีความ
Rangeค่าสูงสุด - ค่าต่ำสุดดูช่วงกว้างของข้อมูลอย่างง่าย
Varianceค่าเฉลี่ยของกำลังสองของระยะห่างจากค่าเฉลี่ยยิ่งสูง ข้อมูลยิ่งกระจายมาก
Standard Deviationรากที่สองของ varianceอ่านง่ายกว่า variance เพราะหน่วยเดียวกับข้อมูลเดิม
IQRQ3 - Q1ใช้ดูการกระจายของข้อมูลช่วงกลางและตรวจ outlier
Coefficient of VariationSD / Meanใช้เปรียบเทียบความผันผวนของข้อมูลต่างหน่วยหรือคนละสเกล
import pandas as pd

sales = [120, 150, 130, 300, 125, 140, 155, 160, 500]
df = pd.DataFrame({'Sales': sales})

mean_sales = df['Sales'].mean()
variance_sales = df['Sales'].var()
std_sales = df['Sales'].std()
q1 = df['Sales'].quantile(0.25)
q3 = df['Sales'].quantile(0.75)
iqr = q3 - q1
cv = std_sales / mean_sales

print('Mean:', mean_sales)
print('Variance:', variance_sales)
print('Standard Deviation:', std_sales)
print('IQR:', iqr)
print('Coefficient of Variation:', cv)

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
outliers = df[(df['Sales'] < lower) | (df['Sales'] > upper)]
print('Outliers:')
print(outliers)
การนำไปใช้: ถ้าพบว่ายอดขายมีส่วนเบี่ยงเบนมาตรฐานสูงมาก องค์กรอาจต้องตรวจสอบปัจจัยที่ทำให้ยอดขายผันผวน เช่น ฤดูกาล โปรโมชัน วันหยุด หรือกลุ่มลูกค้าที่มีพฤติกรรมต่างจากปกติ

4.2.5 การวิเคราะห์แนวโน้ม (Trend Analysis)

Trend Analysis คือการวิเคราะห์ข้อมูลตามเวลาเพื่อดูทิศทางการเปลี่ยนแปลง เช่น ยอดขายรายเดือนเพิ่มขึ้นหรือลดลง จำนวนผู้เข้าเว็บไซต์เปลี่ยนแปลงอย่างไร หรือข้อมูลเซ็นเซอร์มีแนวโน้มสูงขึ้นจนเสี่ยงผิดปกติหรือไม่

วิธีที่ใช้บ่อยในการวิเคราะห์แนวโน้ม

Trend Chart

พล็อตข้อมูลตามเวลาเพื่อดูทิศทางการเปลี่ยนแปลงอย่างชัดเจน

Moving Average

ลดความผันผวนระยะสั้นและช่วยให้เห็นแนวโน้มหลักของข้อมูล

Statistical Methods

ใช้การทดสอบสมมุติฐานหรือค่าสถิติประกอบการตรวจการเปลี่ยนแปลง

Statistical Models

ใช้โมเดลเชิงเวลาเพื่อทำนายแนวโน้มในอนาคต

import pandas as pd
import matplotlib.pyplot as plt

sales = {
    'Month': ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
    'Sales': [120, 135, 128, 150, 165, 170, 180, 175, 190, 205, 215, 230]
}
df = pd.DataFrame(sales)
df['MA3'] = df['Sales'].rolling(window=3).mean()

plt.plot(df['Month'], df['Sales'], marker='o', label='Sales')
plt.plot(df['Month'], df['MA3'], marker='o', label='3-Month Moving Average')
plt.title('Monthly Sales Trend')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.legend()
plt.show()

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

กรณีศึกษา: วิเคราะห์พฤติกรรมการซื้อสินค้า

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

import pandas as pd
import matplotlib.pyplot as plt

# 1) สร้างข้อมูลตัวอย่าง
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']

# 2) วิเคราะห์ความถี่ของสินค้า
print('ความถี่ของสินค้า')
print(df['Product'].value_counts())

# 3) ค่าสถิติพื้นฐาน
print('ค่าสถิติพื้นฐาน')
print(df.describe())

# 4) วิเคราะห์ช่วงอายุ
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())

# 5) ยอดขายรวมและความพึงพอใจเฉลี่ยตามสินค้า
print(df.groupby('Product')['Total'].sum())
print(df.groupby('Product')['Satisfaction'].mean())

# 6) ความสัมพันธ์ของข้อมูลตัวเลข
correlation = df[['Age', 'Quantity', 'Price', 'Total', 'Satisfaction']].corr()
print(correlation)

# 7) ตรวจ outlier ด้วย IQR
Q1 = df['Total'].quantile(0.25)
Q3 = df['Total'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df['Total'] < lower) | (df['Total'] > upper)]
print(outliers)

# 8) กราฟความถี่สินค้า
df['Product'].value_counts().plot(kind='bar')
plt.title('Frequency of Product Purchases')
plt.xlabel('Product')
plt.ylabel('Frequency')
plt.show()

แนวทางแปลผลจากกรณีศึกษา

  • ถ้า Coffee มีความถี่สูงสุด แปลว่าสินค้านี้เป็นสินค้าที่ถูกซื้อบ่อยที่สุด
  • ถ้าลูกค้าส่วนใหญ่อยู่ในช่วงอายุ 20–30 ปี ร้านค้าอาจออกแบบโปรโมชันให้เหมาะกับกลุ่มวัยนี้
  • ยอดขายรวมตามสินค้าอาจให้ข้อสรุปต่างจากความถี่ เช่น ซื้อบ่อยไม่จำเป็นต้องสร้างรายได้สูงสุดเสมอไป
  • Correlation ช่วยดูว่าตัวแปรเช่น อายุ จำนวนสินค้า และยอดซื้อมีความสัมพันธ์กันหรือไม่
  • IQR ช่วยตรวจหายอดซื้อที่สูงหรือต่ำผิดปกติ เพื่อดูว่าเป็นข้อมูลผิดพลาดหรือพฤติกรรมพิเศษของลูกค้า

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

  1. อธิบายความหมายของเทคนิคเชิงสถิติในงานเหมืองข้อมูล และยกตัวอย่างการใช้งานอย่างน้อย 3 ตัวอย่าง
  2. สร้างตารางความถี่และกราฟความถี่จากข้อมูลคะแนนสอบหรือข้อมูลการซื้อสินค้าอย่างน้อย 20 รายการ
  3. คำนวณค่า Mean, Median, Mode, Variance และ Standard Deviation พร้อมแปลผล
  4. สร้างข้อมูลตัวอย่างและวิเคราะห์ Skewness, Kurtosis และ Outliers พร้อมอธิบายผลลัพธ์
  5. คำนวณ correlation ระหว่างตัวแปรอย่างน้อย 2 คู่ และอธิบายว่าเป็นความสัมพันธ์บวก ลบ หรือไม่มีความสัมพันธ์
  6. ทดลองทำ t-test เปรียบเทียบค่าเฉลี่ยของข้อมูล 2 กลุ่ม และเขียนสรุปผลแบบรายงานวิชาการ
  7. สร้างโมเดล Linear Regression อย่างง่ายเพื่อทำนายค่าตัวแปรตามจากตัวแปรอิสระ พร้อมกราฟประกอบ
  8. วิเคราะห์แนวโน้มข้อมูลรายเดือนด้วย Moving Average และอธิบายแนวโน้มที่พบ

สรุปบทที่ 4

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

อ่านต่อ

บทความและบริการที่เกี่ยวข้อง

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