Bài 53: Phương trình hồi quy tuyến tính – Mô hình đơn biến

  • Phương trình hồi qui tuyến tính có rất nhiều ứng dụng trong thực tiễn và là một trong những lớp mô hình đặc biệt quan trọng trong machine learning.
  • Ứng dụng vào việc dự báo về nhu cầu thị trường của một doanh nghiệp để chuẩn bị kế hoạch sản suất kinh doanh. Trong tài chính chúng ta có thể dự báo giá chứng khoán và các chỉ số tài chính dựa trên hồi qui tuyến tính. Hay ta có thể ứng dụng dự báo chỉ số lạm phát, tốc độ tăng trưởng GDP của quốc gia…
  • Hầu hết các bài toán dự báo liên quan tới biến mục tiêu liên tục thì đều có thể sử dụng hồi qui tuyến tính để dự báo.

Bài học hồi quy tuyến tính đơn biến – Simple Linear Regression sẽ được Tui viết thành 2 bài Blog với 2 ví dụ khác nhau. Các bài học đều thử nghiệm trên Excel và trong Python để các bạn dễ dàng hiểu lý thuyết cũng như ứng dụng trong thực tế.

Sau khi trình bày lý thuyết xong, Tui sẽ hướng dẫn các bạn cách tính Hồi quy đơn biến bằng các công thức trong Microsoft Excel và sau đó là lập trình bằng Python:

(Nguồn: medium)

Ta có thể triển khai hồi quy tuyến tính(Linear Regression) bằng:

  • R linear regression.
  • MATLAB linear regression
  • Sklearn linear regression
  • Linear regression Python
  • Linear regression C#
  • Linear regression Java
  • Excel linear regression
  • Tự thực hiện theo các công thức toán học

Simple Linear Regression: Mô hình hồi quy tuyến tính đơn biến chỉ có một biến độc lập (input feature) mô tả mối quan hệ tuyến tính giữa biến phụ thuộc (output target) và biến độc lập. Công thức tổng quát:

Y = Β0 + Β1*X

Ý nghĩa của các biến và hằng số:

  • Y = Biến phụ thuộc
  • X = Biến độc lập
  • Β0 = Hằng số
  • Β1 = Hệ số mối quan hệ giữa X và Y

Một số đặc tính của hồi quy tuyến tính:

  • Đường hồi quy luôn luôn đi qua trung bình của biến độc lập x cũng như trung bình của biến phụ thuộc y
  • Đường hồi quy tối thiểu hóa tổng của “Diện tích các sai số“. Nên đôi khi được gọi là “Ordinary Least Square (OLS)
  • Β1 giải thích sự thay đổi trong Y với sự thay đổi X bằng một đơn vị. Nói cách khác, nếu chúng ta tăng giá trị của X bởi một đơn vị thì nó sẽ là sự thay đổi giá trị của Y

Để tính được giá trị của phương trình hồi quy đơn biến ta cần tính được các dữ kiện sau:

  • Độ lệch chuẩn của biến độc lập x
  • Độ lệch chuẩn của biến phụ thuộc y
  • Trung bình của các biến độc lập x
  • Trung bình của các biến phụ thuộc y
  • Độ tương quan giữa biến độc lập x và biến phục thuộc y

Y = Β0 + Β1*X

  • Tính B1
  • Cuối cùng là tính B0

Bây giờ chúng ta bắt đầu thực hiện hồi quy đơn biến trong Microsoft Excel, giả sử chúng ta có tập dữ liệu trong Excel như dưới đây:

xy
12
24
33
46
59
612
713
815
918
1020
  • Tập dữ liệu gồm có 2 biến x và y. Trong đó biến độc lập là x, biến phụ thuộc là y
    Dùng hồi quy tuyến tính để tính y predicted
  • Để cho nhanh và dễ hiểu, chúng ta thực hiện trong Excel trước, sau đó chúng ta sẽ lập trình bằng Python

Như đã đề cập về cách tính toán các thông số cho phương trình hồi quy:

Y = Β0 + Β1*X

  1. Tính độ lệch chuẩn của biến độc lập x: Sử dụng Công thức STDEV
  2. Tính độ lệch chuẩn của biến phụ thuộc y: Sử dụng Công thức STDEV
  3. Tính trung bình của các biến độc lập x: Sử dụng Công thức AVERAGE
  4. Tính trung bình của các biến phụ thuộc y: Sử dụng công thức AVERAGE
  5. Tính độ tương quan giữa x và y: Sử dụng Công thức CORREL
  6. Tính B1: Sử dụng Công thức

 Độ Tương quan *( Độ lệch chuẩn của y / Độ lệch chuẩn của x)

7. Tính B0: Sử dụng công thức

  Trung bình (Y) – B1 * Trung bình (X)

Ta bắt đầu lắp ráp công thức trong Excel để tính 7 dữ kiện cho công thức hồi quy đơn biến như dưới đây:

Các bạn quan sát Tui nhập các công thức tính toán các thông số, các bạn nhập chính xác như trên. Lưu ý các địa chỉ ô Excel tính toán nó lệ thuộc vào dữ liệu bạn nhập trong Excel, nếu nhập như bài học Tui đã soạn thì không cần đổi địa chỉ ô Excel.

Kết quả thực hiện sẽ hiển thị ra như dưới đây:

Sau khi có các kết quả rồi, ta bổ sung thêm một cột Y-Predicted để lắp ráp tính toán công thức:

Y = Β0 + Β1*X

Kết quả thực hiện phương trình hồi quy đa biến sẽ hiển thị như dưới đây:

Dựa vào cột y và y-predicted mà ta so sánh được kết quả giữa giá trị thực và giá trị dự báo:

Đường màu xanh là giá trị thực (y), đường màu cam là giá trị dự báo (y-predicted). Ta thấy kết quả dự báo khá sát với thực tế.

Bây giờ ta thử lập trình hồi quy đơn biến với Python:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([[1,2,3,4,5,6,7,8,9,10]]).T
y = np.array([[2,4,3,6,9,12,13,15,18,20]]).T

def calculateb1b0(x,y):
  # tính trung bình
  xbar = np.mean(x)
  ybar = np.mean(y)
  x2bar = np.mean(x ** 2)
  xybar = np.mean(x * y)

  # tính b0, b1
  b1 = (xbar * ybar - xybar) / (xbar ** 2 - (x2bar))
  b0 = ybar - b1 * xbar
  return b1,b0
#calulate b1, b0
b1,b0=calculateb1b0(x,y)
print("b1=",b1)
print("b0=",b0)
y_predicted=b0+b1*x
print(y_predicted)

Thực thi mã lệnh Python ở trên ta tính được b1 và b0 giống như Excel mà ta đã tính ở bên trên:

Tính được b1 b0 coi như đã hoàn thành được phương trình hồi quy đơn biến. Vì có b1 và b0 ta tính được:

y_predicted=b0+b1*x

So sánh kết quả y_predicted cũng giống như Excel đã tính.

Ta tiếp tục bổ sung mã lệnh để trực quan hóa dữ liệu:

# Visualize data
def showGraph(x, y,y_predicted, title="", xlabel="", ylabel=""):
  plt.figure(figsize=(14, 8))
  plt.plot(x, y, 'r-o', label="value sample")
  plt.plot(x, y_predicted, 'b-*', label="predicted value")
  x_min = np.min(x)
  x_max = np.max(x)
  y_min = np.min(y)
  y_max = np.max(y)
  # mean y
  ybar = np.mean(y)

  plt.axhline(ybar, linestyle='--', linewidth=4, label="mean")
  plt.axis([x_min*0.95, x_max*1.05, y_min*0.95, y_max*1.05])
  plt.xlabel(xlabel, fontsize=16)
  plt.ylabel(ylabel, fontsize=16)
  plt.text(x_min, ybar*1.01, "mean", fontsize=16)
  plt.legend(fontsize=15)
  plt.title(title, fontsize=20)
  plt.show()

showGraph(x, y,y_predicted,
      title='Giá trị Y theo X',
      xlabel='Giá trị X',
      ylabel='Giá trị Y')

Chạy mã lệnh trên ta có kết quả:

Như vậy cách tính hồi quy đơn biến trong Excel và trong Python là giống nhau.

Sourecode đầy đủ của hồi quy đơn biến đối với bài học này:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([[1,2,3,4,5,6,7,8,9,10]]).T
y = np.array([[2,4,3,6,9,12,13,15,18,20]]).T

def calculateb1b0(x,y):
  # tính trung bình
  xbar = np.mean(x)
  ybar = np.mean(y)
  x2bar = np.mean(x ** 2)
  xybar = np.mean(x * y)

  # tính b0, b1
  b1 = (xbar * ybar - xybar) / (xbar ** 2 - (x2bar))
  b0 = ybar - b1 * xbar
  return b1,b0
#calulate b1, b0
b1,b0=calculateb1b0(x,y)
print("b1=",b1)
print("b0=",b0)
y_predicted=b0+b1*x
print(y_predicted)

# Visualize data
def showGraph(x, y,y_predicted, title="", xlabel="", ylabel=""):
  plt.figure(figsize=(14, 8))
  plt.plot(x, y, 'r-o', label="value sample")
  plt.plot(x, y_predicted, 'b-*', label="predicted value")
  x_min = np.min(x)
  x_max = np.max(x)
  y_min = np.min(y)
  y_max = np.max(y)
  # mean y
  ybar = np.mean(y)

  plt.axhline(ybar, linestyle='--', linewidth=4, label="mean")
  plt.axis([x_min*0.95, x_max*1.05, y_min*0.95, y_max*1.05])
  plt.xlabel(xlabel, fontsize=16)
  plt.ylabel(ylabel, fontsize=16)
  plt.text(x_min, ybar*1.01, "mean", fontsize=16)
  plt.legend(fontsize=15)
  plt.title(title, fontsize=20)
  plt.show()

showGraph(x, y,y_predicted,
      title='Giá trị Y theo X',
      xlabel='Giá trị X',
      ylabel='Giá trị Y')

Như vậy tới đây Tui đã hướng dẫn xong lý thuyết về hồi quy đơn biến, giải thích chi tiết các thông số trong công thức hồi quy đơn biến, cũng như các dữ kiện cần phải tính toán, và minh họa được cách tính hồi quy đơn biến trong Excel và bằng Python code.

Các bạn tải excel tính hồi quy đơn biến ở đây:

https://www.mediafire.com/file/5rtgfbvwbex819t/Simple-Linear-Regression-1.xlsx/file

Các bạn tải source code Python tính hồi quy đơn biến ở đây:

https://www.mediafire.com/file/172v8nq457on20i/SimpleLinearRegression1.py/file

Các bạn lưu ý thực hiện bài này nhiều lần, bài học sau Tui tiếp tục trình bày thêm một ví dụ về hồi quy đơn biến để dự báo giá nhà, cũng thực hiện trong Excel và trong Python code.

Chúc các bạn thành công

2 thoughts on “Bài 53: Phương trình hồi quy tuyến tính – Mô hình đơn biến”

Leave a Reply