ภาพรวมบทเรียน
การวิเคราะห์ข้อมูลเชิงสถิติในงานเหมืองข้อมูล คือการใช้เครื่องมือและเทคนิคทางสถิติเพื่อวิเคราะห์ข้อมูลจำนวนมาก ค้นหารูปแบบที่ซ่อนอยู่ อธิบายลักษณะของข้อมูล ตรวจสอบความสัมพันธ์ และสนับสนุนการสร้างโมเดลทำนายหรือโมเดลจำแนกข้อมูล
บทนี้เน้นเทคนิคเชิงสถิติที่ใช้บ่อยในงานเหมืองข้อมูล ได้แก่ การวิเคราะห์ความถี่ การวิเคราะห์การกระจาย การวิเคราะห์ความสัมพันธ์ การวิเคราะห์การแปรปรวน และการวิเคราะห์แนวโน้ม ซึ่งเป็นพื้นฐานสำคัญก่อนเข้าสู่การสร้างโมเดล 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 หรือค่าสถิติที่เกี่ยวข้อง
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)
| คะแนน | จำนวนครั้ง | การแปลผล |
|---|---|---|
| 75 | 3 | พบ 3 ครั้ง |
| 82 | 4 | พบมากที่สุดร่วมกับ 88 |
| 88 | 4 | พบมากที่สุดร่วมกับ 82 |
| 92 | 3 | พบ 3 ครั้ง |
| 95 | 1 | พบเพียง 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 | แทบไม่มีความสัมพันธ์เชิงเส้น | ตัวแปรเปลี่ยนโดยไม่สัมพันธ์กันชัดเจน |
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)
การทดสอบสมมุติฐาน (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')
การวิเคราะห์เชิงเส้น (Linear Regression)
Linear Regression เป็นเทคนิคทางสถิติที่ใช้วิเคราะห์ความสัมพันธ์ระหว่างตัวแปรอิสระและตัวแปรตาม โดยมีเป้าหมายเพื่อหาเส้นตรงที่เหมาะสมที่สุดสำหรับทำนายค่าของตัวแปรตาม
- 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 เพราะหน่วยเดียวกับข้อมูลเดิม |
| IQR | Q3 - Q1 | ใช้ดูการกระจายของข้อมูลช่วงกลางและตรวจ outlier |
| Coefficient of Variation | SD / 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 ช่วยตรวจหายอดซื้อที่สูงหรือต่ำผิดปกติ เพื่อดูว่าเป็นข้อมูลผิดพลาดหรือพฤติกรรมพิเศษของลูกค้า
แบบฝึกหัดท้ายบท
- อธิบายความหมายของเทคนิคเชิงสถิติในงานเหมืองข้อมูล และยกตัวอย่างการใช้งานอย่างน้อย 3 ตัวอย่าง
- สร้างตารางความถี่และกราฟความถี่จากข้อมูลคะแนนสอบหรือข้อมูลการซื้อสินค้าอย่างน้อย 20 รายการ
- คำนวณค่า Mean, Median, Mode, Variance และ Standard Deviation พร้อมแปลผล
- สร้างข้อมูลตัวอย่างและวิเคราะห์ Skewness, Kurtosis และ Outliers พร้อมอธิบายผลลัพธ์
- คำนวณ correlation ระหว่างตัวแปรอย่างน้อย 2 คู่ และอธิบายว่าเป็นความสัมพันธ์บวก ลบ หรือไม่มีความสัมพันธ์
- ทดลองทำ t-test เปรียบเทียบค่าเฉลี่ยของข้อมูล 2 กลุ่ม และเขียนสรุปผลแบบรายงานวิชาการ
- สร้างโมเดล Linear Regression อย่างง่ายเพื่อทำนายค่าตัวแปรตามจากตัวแปรอิสระ พร้อมกราฟประกอบ
- วิเคราะห์แนวโน้มข้อมูลรายเดือนด้วย Moving Average และอธิบายแนวโน้มที่พบ
สรุปบทที่ 4
การวิเคราะห์ข้อมูลเชิงสถิติเป็นพื้นฐานสำคัญของการทำเหมืองข้อมูล เพราะช่วยให้ผู้วิเคราะห์เข้าใจข้อมูลก่อนสร้างโมเดล ค้นหารูปแบบที่ซ่อนอยู่ ตรวจสอบความสัมพันธ์ ความแปรปรวน และแนวโน้ม ตลอดจนช่วยลดความเสี่ยงจากการตีความข้อมูลผิดพลาด