การพยากรณ์ยอดขาย โดยใช้การเปรียบเทียบโมเดล Linear Regression และ DNN (TensorFlow)

เราต้องการเปรียบเทียบยอดขายของขนมปังในแต่ละวัน โดยเราจะสร้างโมเดล 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 ก็อาจให้ผลลัพธ์ที่ดีกว่า ขึ้นอยู่กับว่าโมเดลนั้นเหมาะกับลักษณะของงานและปัญหาของเราไหม

Apr 11, 2025 - 01:00
 0
การพยากรณ์ยอดขาย โดยใช้การเปรียบเทียบโมเดล Linear Regression และ DNN (TensorFlow)

เราต้องการเปรียบเทียบยอดขายของขนมปังในแต่ละวัน โดยเราจะสร้างโมเดล 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 ติดตั้งและนำเข้าไลบรารี

Image description

numpy สร้างข้อมูลตัวเลขของวัน
pandas ใช้จัดเก็บข้อมูลให้อยู่ในรูปแบบตาราง
matplotlib.pyplot ใช้วาดกราฟแสดงผล
tensorflow ใช้สร้างและฝึกโมเดล DNN

ขั้นตอนที่ 2 สร้างข้อมูลจำลองยอดขายขนมปัง

Image description

เราสร้างข้อมูลจำลองขึ้นมาสำหรับยอดขายขนมปังในแต่ละวัน และกำหนดยอดขายให้มีแนวโน้มเพิ่มขึ้นเรื่อยๆ ตลอด 30 วัน

ขั้นตอนที่ 3 แบ่งข้อมูลเป็น Training และ Testing

Image description

ใช้ train_test_split แบ่งข้อมูลเพื่อฝึกและทดสอบโมเดล

ขั้นตอนที่ 4 สร้างโมเดล Neural Network

Image description

เราใช้ Keras สร้างโมเดล DNN แบบ Sequential

ขั้นตอนที่ 5 คอมไพล์โมเดล

Image description

เราใช้ loss function, optimizer และ metric วัดผลการฝึกของโมเดล

ขั้นตอนที่ 6 ฝึกโมเดล

Image description

เราฝึกโมเดลโดยใช้ข้อมูลที่แบ่งไว้ พร้อมใช้ EarlyStopping เพื่อหยุดการฝึกอัตโนมัติหาก validation loss ไม่ดีขึ้นเพื่อลดการ overfitting

outputที่ได้
Image description

ขั้นตอนที่ 7 แสดงกราฟเปรียบเทียบ Linear Regression กับ DNN

Image description
กราฟเปรียบเทียบโมเดลทั้งสองแบบ

Image description

  • จุดสีแดง คือ ยอดขายจริง
  • เส้นประสีน้ำเงิน คือ Linear Regression พยากรณ์ยอดขายแบบเส้นตรง
  • เส้นประสีเขียว คือ DNN Prediction จากโมเดล Neural Network

Image description
ตารางเปรียบเทียบค่าจริง (Actual Sales) กับค่าที่โมเดล Linear Regression และ DNN

8.พยากรณ์ยอดขายในวันที่ 31

Image description
outputที่ได้

Image description
จากผลการพยากรณ์ยอดขายในวันที่ 31 พบว่า Linear Regression ทำนายได้ใกล้เคียงกับแนวโน้มยอดขายที่เพิ่มขึ้นมากกว่า โดยให้ค่าประมาณ 112.97 ชิ้น แต่ DNN ทำนายเพียง 34.47 ชิ้น ซึ่งต่ำกว่าความเป็นจริง

ต่อไปเราจะสร้างตัวอย่างข้อมูลใหม่ที่แตกต่างจากเดิม
กำหนดให้ยอดขายเติบโตช้าในช่วงต้นในวันที่ 1–15 และเพิ่มขึ้นอย่างรวดเร็วในช่วงหลังวันที่ 16–30
เพื่อทดสอบว่า Linear Regression หรือ TensorFlow DNN จะสามารถเรียนรู้แนวโน้มที่เปลี่ยนแปลงนี้ได้แม่นยำมากกว่ากัน

ขั้นตอนที่ 1 ติดตั้งและนำเข้าไลบรารี

Image description

นำเข้าไลบรารีที่จำเป็นสำหรับการจัดการข้อมูล (Pandas, Numpy) กราฟ (Matplotlib) การสร้างโมเดล (TensorFlow, Keras)และการใช้โมเดลพื้นฐานจาก scikit-learn

ขั้นตอนที่ 2 สร้างข้อมูลจำลองแบบ โตช้า-โตเร็ว

Image description

จำลองข้อมูลยอดขายที่โตช้าในช่วงแรก ในวันที่ 1-15 และโตเร็วในช่วงหลังคือวันที่ 16-30 เพื่อทดสอบว่าโมเดลจะจับความเปลี่ยนแปลงนี้ได้ไหม

Image description
ยอดขายจำลองในช่วงวันที่ 1–5

ขั้นตอนที่ 3 แบ่งข้อมูล Training และ Testing

Image description

การแบ่งข้อมูลสำหรับฝึกโมเดลและทดสอบโดยใช้ฟังก์ชัน train_test_split

ขั้นตอนที่ 4 สร้างโมเดล Neural Network

Image description

สร้างโมเดลแบบ Sequential ที่มี 2 ชั้นซ่อน Hidden Layers โดยใช้ฟังก์ชัน ReLU เป็น Activation เพื่อให้โมเดลรู้ความสัมพันธ์ที่ไม่เป็นเชิงเส้นได้

ขั้นตอนที่ 5 คอมไพล์โมเดล

Image description

กำหนดให้ loss function เป็น mean squared error (MSE)ให้optimizer เป็น Adam และ metric ที่ใช้ประเมินผลเป็น mean absolute error (MAE)

ขั้นตอนที่ 6 ฝึกโมเดล

Image description

ฝึกโมเดลด้วยข้อมูล training และใช้ EarlyStopping หยุดการฝึกหาก validation loss ไม่ลดลงต่อเนื่อง 3 รอบ

outputที่ได้

Image description

ขั้นตอนที่ 7 แสดงกราฟเปรียบเทียบ Linear Regression กับ DNN

Image description
กราฟเปรียบเทียบโมเดลทั้งสองแบบ
Image description

  • Actual Sales จุดสีแดง คือ ข้อมูลจริง
  • Linear Regression เส้นประสีน้ำเงิน คือ โมเดลเส้นตรงที่พยายามจับแนวโน้ม
  • DNN Prediction คือ Neural Network

เราสามารถดูความแม่นยำได้ด้วยค่า MSE ซึ่งเป็นค่าที่เอาไว้ดูว่าผลการทำนายของโมเดล ยิ่งค่า MSE ต่ำก็แปลว่าโมเดลทำนายได้แม่นยำมากขึ้น
จากการทดลองครั้งนี้พบว่า Linear Regression ให้ค่า MSE ต่ำกว่า DNN อย่างชัดเจน โดยเฉพาะกับข้อมูลที่มีแนวโน้มเป็นเส้นตรง

ขั้นตอนที่ 8 พยากรณ์ยอดขายในวันที่ 31

Image description

ใช้โมเดล DNN ที่ฝึกเสร็จมาพยากรณ์ยอดขายในวันถัดไปจากข้อมูลที่ไม่มีใน dataset

outputที่ได้

Image description
จากผลการพยากรณ์ยอดขายในวันที่ 31 พบว่า Linear Regression ทำนายได้ 175.94ชิ้น ซึ่งสอดคล้องกับแนวโน้มที่เพิ่มขึ้นของข้อมูล ในขณะที่ DNN ทำนายได้เพียง 19.27ชิ้น แสดงให้เห็นว่า DNN ยังไม่สามารถเข้าใจแนวโน้มการเติบโตแบบพุ่งสูงในช่วงท้ายได้

สรุปเนื้อหา
จากการเปรียบเทียบพบว่า Linear Regression สามารถพยากรณ์แนวโน้มยอดขายขนมปังได้แม่นยำกว่า DNN เพราะโมเดลเส้นตรงสามารถจับภาพรวมของแนวโน้มข้อมูลที่เติบโตแบบค่อยเป็นค่อยไปในช่วงต้น และพุ่งสูงในช่วงท้ายได้ดีกว่า ในขณะที่ DNN ซึ่งฝึกมาน้อยหรือข้อมูลอาจจะน้อยเกินไปสำหรับDNN ทำให้การพยากรณ์ต่ำเกินจริงตลอดช่วง โดยเฉพาะช่วงที่ยอดขายเพิ่มขึ้นรวดเร็วในวันท้ายๆ แสดงให้เห็นว่าโมเดลยังไม่ซับซ้อนพอที่จะทำให้DNN เข้าใจรูปแบบข้อมูลที่มีการเปลี่ยนแปลงเฉียบพลัน
การทดลองครั้งนี้ทำให้เข้าใจว่า เวลาเลือกใช้โมเดล Machine Learning ไม่จำเป็นต้องเลือกแบบที่ซับซ้อนที่สุดเสมอไป เพราะบางครั้งโมเดลง่ายๆ อย่าง Linear Regression ก็อาจให้ผลลัพธ์ที่ดีกว่า ขึ้นอยู่กับว่าโมเดลนั้นเหมาะกับลักษณะของงานและปัญหาของเราไหม