การใช้ Linear Regression ทำนายจำนวนยอดคนติดตามใน YouTube ในแต่ละเดือน
Published: 2024-04-16 14:19:11

**Linear Regression Algorithm คืออะไร?**

Linear Regression เป็นอัลกอริทึมใน Machine Learning ที่ใช้สำหรับการทำนายค่าต่อเนื่อง (continuous values) โดยที่มีความสัมพันธ์เชิงเส้นระหว่างตัวแปรอิสระ (independent variables) กับตัวแปรตาม (dependent variable) ซึ่งมักจะมีค่าเป็นตัวเลขหรือจำนวนจริง

Linear Regression มีหลักการทำงานโดยการสร้างโมเดลเส้นตรงที่ปรับค่าของพารามิเตอร์ (parameters) ให้เข้ากับข้อมูลอย่างดีที่สุด เพื่อทำให้ค่าที่ทำนายได้ใกล้เคียงกับค่าจริงของข้อมูลที่มีอยู่

โดยปกติ Linear Regression มักจะใช้สูตรสำหรับการคำนวณค่าของเส้นตรง โดยที่มีสูตรหลักๆ คือสูตรของเส้นตรงในรูปแบบของสมการเส้นตรง (linear equation) ซึ่งมีรูปแบบดังนี้ **y=mx+b**

โดยที่ 
- y คือ ตัวแปรตาม (dependent variable) ที่ต้องการทำนายค่า
- x คือ ตัวแปรอิสระ (independent variable)
- m คือ ความชัน (slope)
- b คือ จุดตัดแกน y (intercept)

โดย Linear Regression จะพยายามปรับค่าของ m และ b ให้เข้ากับข้อมูลอย่างดีที่สุด โดยใช้วิธีการเรียนรู้ (learning algorithm) ซึ่งส่วนใหญ่จะใช้วิธีการที่เรียกว่า Ordinary Least Squares (OLS) หรือ Gradient Descent

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

**Correlation Coefficient คือ**
Correlation Coefficient เป็นค่าที่ใช้ในการวัดความสัมพันธ์ระหว่างคู่ของตัวแปร โดยมักใช้ในการวัดความสัมพันธ์ระหว่างตัวแปรอิสระ (independent variables) และตัวแปรตาม (dependent variable) ใน Linear Regression หรือในการวิเคราะห์ข้อมูลที่เกี่ยวข้องกับความสัมพันธ์ระหว่างตัวแปรต่างๆ

**Correlation Coefficient มักจะถูกแสดงในช่วงค่าระหว่าง -1 ถึง 1 โดยมีความหมายดังนี้**

**ค่า +1:** หมายถึง มีความสัมพันธ์บวกที่เสมอกัน หรือกล่าวได้ว่าเมื่อค่าของตัวแปรหนึ่งเพิ่มขึ้น ค่าของตัวแปรอีกตัวก็จะเพิ่มขึ้นด้วย และเมื่อค่าของตัวแปรหนึ่งลดลง ค่าของตัวแปรอีกตัวก็จะลดลงด้วย

**ค่า -1:** หมายถึง มีความสัมพันธ์ลบที่เสมอกัน หรือกล่าวได้ว่าเมื่อค่าของตัวแปรหนึ่งเพิ่มขึ้น ค่าของตัวแปรอีกตัวก็จะลดลง และเมื่อค่าของตัวแปรหนึ่งลดลง ค่าของตัวแปรอีกตัวก็จะเพิ่มขึ้น

**ค่า 0:** หมายถึง ไม่มีความสัมพันธ์ระหว่างตัวแปรทั้งสอง หรือกล่าวได้ว่าการเปลี่ยนแปลงในค่าของตัวแปรหนึ่งไม่ได้ทำให้เกิดการเปลี่ยนแปลงในค่าของตัวแปรอีกตัว

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

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

เราจะใช้ Google Colab ในการรันโค้ด โดยข้อมูลจำนวนยอดคนติดตามในYoutubeเราจะทำการสุ่ม

## ขั้นตอนที่ 1 Import Libraries

- numpy
- matplotlib.pyplot
- sklearn.linear_model

```
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
```

## ขั้นตอนที่ 2 กำหนดข้อมูลตัวอย่าง x และ y 
โดยเราจะให้ x เป็นเดือนแต่ละเดือน และให้ y เป็นจำนวนยอดคนติดตามในYoutube จากนั้นเราก็มา Scatter Plot ใช้ **plt.scatter()** เพื่อพล็อตข้อมูลตัวอย่าง x และ y ในกราฟ scatter plot

```
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] # เดือน
y=[20,40,70,110,160,220,280,360,450,550,660,780] # จำนวนยอดคนติดตามในYoutubeในแต่ละเดือน

plt.scatter(x,y) # Scatter Plot
```

รูปกราฟที่ได้
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oo10eubib5b6lh1d55ng.png)

## ขั้นตอนที่ 3 สร้างและเทรน Model
ใช้ **LinearRegression()** เพื่อสร้างแบบจำลอง linear regression
ปรับข้อมูล x และ y เป็น array 2 มิติ และทำการ reshape

ใช้ **model.fit()** เพื่อเทรนแบบจำลอง linear regression ด้วยข้อมูล x และ y

ใช้ **model.score()** เพื่อคำนวณค่า r หรือ coefficient of determination ซึ่งเป็นค่าที่บ่งบอกถึงความสัมพันธ์ระหว่างตัวแปร x และ y 
(ค่า r จะอยู่ในช่วง 0-1 โดยค่ามากกว่าหรือเท่ากับ 1 แสดงถึงความสัมพันธ์ที่ดีที่สุด)

```
model=LinearRegression()

x=np.array(x) # เปลี่ยน list เป็น array
y=np.array(y) # เปลี่ยน list เป็น array
x=x.reshape(-1,1) # เปลี่ยน x ให้เป็น array 2D

model.fit(x,y) # เทรน Model

model.score(x,y) # เมื่อเทรนเสร็จ ใช้คำสั่งนี้แสดงค่า r ของความสัมพันธ์
# Output ของค่า r คือ 0.9528459319763668
```

ใช้ **np.linspace()** เพื่อสร้างชุดข้อมูล xtest สำหรับทดสอบแบบจำลอง โดยให้ xtest เป็นชุดข้อมูลตัวเลขที่ครอบคลุมช่วง 0-13

ใช้ **model.predict()** เพื่อทำการทดสอบแบบจำลองด้วยข้อมูลทดสอบ xtest และทำนายค่า y ที่คาดเดาได้

ใช้ **plt.plot()** เพื่อพล็อตเส้นกราฟที่แสดงความสัมพันธ์ระหว่าง xtest และ ytest (ค่าที่ทำนายได้จากแบบจำลอง)

```
xtest=np.linspace(0,13) # สร้างชุดข้อมูลสำหรับทดสอบขึ้นมา โดยเป็นชุดข้อมูลตัวเลขระหว่าง 0-13

xtest=xtest.reshape(-1,1) # เปลี่ยน xtest เป็น array 2D
ytest=model.predict(xtest) # ทดสอบโมเดลด้วย xtest

plt.scatter(x,y) # นำค่า x, y ชุดข้อมูลตัวอย่างมา Scatter Plot
plt.plot(xtest,ytest) # นำค่า xtest, ytest มา Plot
```

รูปกราฟที่ได้
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i4nkey5lffs1le0jwguj.png)

- กราฟเส้นตรง Plot มาจาก xtest และ ytest
- Scatter Plot มาจาก x และ y ที่เป็นชุดข้อมูลตัวอย่าง

เส้นกราฟที่ได้จาก xtest และ ytest เป็นกราฟเส้นตรงที่สอดคล้องกับ Scatter Plot จากชุดข้อมูลตัวอย่างที่เรากำหนด รวมถึงค่า r ที่ได้ประมาณ 0.952 ซึ่งใกล้เคียง +1.0 มาก

**สรุป**
หลักการของ Linear Regression นั้นก็คือการนำ Data ย้อนหลังมาสร้างเส้นตรง 
โดยเส้นนี้จะเป็นค่ากลางที่มีความใกล้กับทุกจุดมากที่สุด
หลังจากได้เส้นตรงแล้วเราสามารถใช้เส้นนี้คำนวณหาค่าจำนวนยอดคนติดตามในYoutubeในแต่ละเดือนที่เราต้องการทำนายได้

**References**
https://www.borntodev.com/2021/08/26/ทำความรู้จัก-linear-regression-algorithm-ที่คนท/