เราต้องการเปรียบเทียบยอดขายของขนมปังในแต่ละวัน โดยเราจะสร้างโมเดล Machine Learning เพื่อพยากรณ์ยอดขายขนมปัง โดยอิงข้อมูลจากยอดขายของ 30 วันแรก
โดยจะเปรียบเทียบโมเดล 2 แบบ คือ
1.Linear Regression
2.DNN (Deep Neural Network)
ขั้นตอนการนำเข้าข้อมูล มีทั้งหมด 8 ขั้นตอน ดังนี้
1.ติดตั้งและนำเข้าไลบรารี
2.สร้างข้อมูลจำลองยอดขายขนมปัง
3.แบ่งข้อมูลเป็น Training และ Testing
4.สร้างโมเดล Neural Network
5.คอมไพล์โมเดล
6.ฝึกโมเดล
7.แสดงกราฟเปรียบเทียบ Linear Regression กับ DNN
8.พยากรณ์ยอดขายในวันที่ 31
ขั้นตอนที่ 1 ติดตั้งและนำเข้าไลบรารี
numpy สร้างข้อมูลตัวเลขของวัน
pandas ใช้จัดเก็บข้อมูลให้อยู่ในรูปแบบตาราง
matplotlib.pyplot ใช้วาดกราฟแสดงผล
tensorflow ใช้สร้างและฝึกโมเดล DNN
ขั้นตอนที่ 2 สร้างข้อมูลจำลองยอดขายขนมปัง
เราสร้างข้อมูลจำลองขึ้นมาสำหรับยอดขายขนมปังในแต่ละวัน และกำหนดยอดขายให้มีแนวโน้มเพิ่มขึ้นเรื่อยๆ ตลอด 30 วัน
ขั้นตอนที่ 3 แบ่งข้อมูลเป็น Training และ Testing
ใช้ train_test_split แบ่งข้อมูลเพื่อฝึกและทดสอบโมเดล
ขั้นตอนที่ 4 สร้างโมเดล Neural Network
เราใช้ Keras สร้างโมเดล DNN แบบ Sequential
ขั้นตอนที่ 5 คอมไพล์โมเดล
เราใช้ loss function, optimizer และ metric วัดผลการฝึกของโมเดล
ขั้นตอนที่ 6 ฝึกโมเดล
เราฝึกโมเดลโดยใช้ข้อมูลที่แบ่งไว้ พร้อมใช้ EarlyStopping เพื่อหยุดการฝึกอัตโนมัติหาก validation loss ไม่ดีขึ้นเพื่อลดการ overfitting
outputที่ได้
ขั้นตอนที่ 7 แสดงกราฟเปรียบเทียบ Linear Regression กับ DNN
กราฟเปรียบเทียบโมเดลทั้งสองแบบ
- จุดสีแดง คือ ยอดขายจริง
- เส้นประสีน้ำเงิน คือ Linear Regression พยากรณ์ยอดขายแบบเส้นตรง
- เส้นประสีเขียว คือ DNN Prediction จากโมเดล Neural Network
ตารางเปรียบเทียบค่าจริง (Actual Sales) กับค่าที่โมเดล Linear Regression และ DNN
8.พยากรณ์ยอดขายในวันที่ 31
outputที่ได้
จากผลการพยากรณ์ยอดขายในวันที่ 31 พบว่า Linear Regression ทำนายได้ใกล้เคียงกับแนวโน้มยอดขายที่เพิ่มขึ้นมากกว่า โดยให้ค่าประมาณ 112.97 ชิ้น แต่ DNN ทำนายเพียง 34.47 ชิ้น ซึ่งต่ำกว่าความเป็นจริง
ต่อไปเราจะสร้างตัวอย่างข้อมูลใหม่ที่แตกต่างจากเดิม
กำหนดให้ยอดขายเติบโตช้าในช่วงต้นในวันที่ 1–15 และเพิ่มขึ้นอย่างรวดเร็วในช่วงหลังวันที่ 16–30
เพื่อทดสอบว่า Linear Regression หรือ TensorFlow DNN จะสามารถเรียนรู้แนวโน้มที่เปลี่ยนแปลงนี้ได้แม่นยำมากกว่ากัน
ขั้นตอนที่ 1 ติดตั้งและนำเข้าไลบรารี
นำเข้าไลบรารีที่จำเป็นสำหรับการจัดการข้อมูล (Pandas, Numpy) กราฟ (Matplotlib) การสร้างโมเดล (TensorFlow, Keras)และการใช้โมเดลพื้นฐานจาก scikit-learn
ขั้นตอนที่ 2 สร้างข้อมูลจำลองแบบ โตช้า-โตเร็ว
จำลองข้อมูลยอดขายที่โตช้าในช่วงแรก ในวันที่ 1-15 และโตเร็วในช่วงหลังคือวันที่ 16-30 เพื่อทดสอบว่าโมเดลจะจับความเปลี่ยนแปลงนี้ได้ไหม
ยอดขายจำลองในช่วงวันที่ 1–5
ขั้นตอนที่ 3 แบ่งข้อมูล Training และ Testing
การแบ่งข้อมูลสำหรับฝึกโมเดลและทดสอบโดยใช้ฟังก์ชัน train_test_split
ขั้นตอนที่ 4 สร้างโมเดล Neural Network
สร้างโมเดลแบบ Sequential ที่มี 2 ชั้นซ่อน Hidden Layers โดยใช้ฟังก์ชัน ReLU เป็น Activation เพื่อให้โมเดลรู้ความสัมพันธ์ที่ไม่เป็นเชิงเส้นได้
ขั้นตอนที่ 5 คอมไพล์โมเดล
กำหนดให้ loss function เป็น mean squared error (MSE)ให้optimizer เป็น Adam และ metric ที่ใช้ประเมินผลเป็น mean absolute error (MAE)
ขั้นตอนที่ 6 ฝึกโมเดล
ฝึกโมเดลด้วยข้อมูล training และใช้ EarlyStopping หยุดการฝึกหาก validation loss ไม่ลดลงต่อเนื่อง 3 รอบ
outputที่ได้
ขั้นตอนที่ 7 แสดงกราฟเปรียบเทียบ Linear Regression กับ DNN
กราฟเปรียบเทียบโมเดลทั้งสองแบบ
- Actual Sales จุดสีแดง คือ ข้อมูลจริง
- Linear Regression เส้นประสีน้ำเงิน คือ โมเดลเส้นตรงที่พยายามจับแนวโน้ม
- DNN Prediction คือ Neural Network
เราสามารถดูความแม่นยำได้ด้วยค่า MSE ซึ่งเป็นค่าที่เอาไว้ดูว่าผลการทำนายของโมเดล ยิ่งค่า MSE ต่ำก็แปลว่าโมเดลทำนายได้แม่นยำมากขึ้น
จากการทดลองครั้งนี้พบว่า Linear Regression ให้ค่า MSE ต่ำกว่า DNN อย่างชัดเจน โดยเฉพาะกับข้อมูลที่มีแนวโน้มเป็นเส้นตรง
ขั้นตอนที่ 8 พยากรณ์ยอดขายในวันที่ 31
ใช้โมเดล DNN ที่ฝึกเสร็จมาพยากรณ์ยอดขายในวันถัดไปจากข้อมูลที่ไม่มีใน dataset
outputที่ได้
จากผลการพยากรณ์ยอดขายในวันที่ 31 พบว่า Linear Regression ทำนายได้ 175.94ชิ้น ซึ่งสอดคล้องกับแนวโน้มที่เพิ่มขึ้นของข้อมูล ในขณะที่ DNN ทำนายได้เพียง 19.27ชิ้น แสดงให้เห็นว่า DNN ยังไม่สามารถเข้าใจแนวโน้มการเติบโตแบบพุ่งสูงในช่วงท้ายได้
สรุปเนื้อหา
จากการเปรียบเทียบพบว่า Linear Regression สามารถพยากรณ์แนวโน้มยอดขายขนมปังได้แม่นยำกว่า DNN เพราะโมเดลเส้นตรงสามารถจับภาพรวมของแนวโน้มข้อมูลที่เติบโตแบบค่อยเป็นค่อยไปในช่วงต้น และพุ่งสูงในช่วงท้ายได้ดีกว่า ในขณะที่ DNN ซึ่งฝึกมาน้อยหรือข้อมูลอาจจะน้อยเกินไปสำหรับDNN ทำให้การพยากรณ์ต่ำเกินจริงตลอดช่วง โดยเฉพาะช่วงที่ยอดขายเพิ่มขึ้นรวดเร็วในวันท้ายๆ แสดงให้เห็นว่าโมเดลยังไม่ซับซ้อนพอที่จะทำให้DNN เข้าใจรูปแบบข้อมูลที่มีการเปลี่ยนแปลงเฉียบพลัน
การทดลองครั้งนี้ทำให้เข้าใจว่า เวลาเลือกใช้โมเดล Machine Learning ไม่จำเป็นต้องเลือกแบบที่ซับซ้อนที่สุดเสมอไป เพราะบางครั้งโมเดลง่ายๆ อย่าง Linear Regression ก็อาจให้ผลลัพธ์ที่ดีกว่า ขึ้นอยู่กับว่าโมเดลนั้นเหมาะกับลักษณะของงานและปัญหาของเราไหม