Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), và cụ thể
hơn là Machine Learning (Học Máy hoặc Máy Học) nổi lên như một bằng chứng của
cuộc cách mạng công nghiệp lần thứ tư (1 - động cơ hơi nước, 2 - năng lượng điện, 3 -
công nghệ thông tin). Trí Tuệ Nhân Tạo đang len lỏi vào mọi lĩnh vực trong đời sống
mà có thể chúng ta không nhận ra. Xe tự hành của Google và Tesla, hệ thống tự tag
khuôn mặt trong ảnh của Facebook, trợ lý ảo Siri của Apple, hệ thống gợi ý sản phẩm
của Amazon, hệ thống gợi ý phim của Netflix, máy chơi cờ vây AlphaGo của Google
DeepMind, , chỉ là một vài trong vô vàn những ứng dụng của AI/Machine Learning.
Machine Learning là một lĩnh vực nhỏ của Khoa Học Máy Tính, nó có khả năng
tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể.
8 trang |
Chia sẻ: thuyduongbt11 | Ngày: 11/06/2022 | Lượt xem: 440 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Ứng dụng học máy xây dựng module giải bài toán dự đoán giá bất động sản, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
28
ỨNG DỤNG HỌC MÁY XÂY DỰNG MODULE GIẢI BÀI TOÁN
DỰ ĐOÁN GIÁ BẤT ĐỘNG SẢN
Đỗ Thùy Dương
Trường Đại học Hà Nội
Tóm tắt – Bài báo cáo này đưa ra phương pháp tiếp cận bài toán dự đoán giá bất động
sản, thông qua học máy, xây dựng mô đun tính toán, cực tiểu hàm lỗi.
Từ khóa – Học máy, Học có giám sát, giá bất động sản, scikit-learn, python
1. Định nghĩa Học Máy:
Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), và cụ thể
hơn là Machine Learning (Học Máy hoặc Máy Học) nổi lên như một bằng chứng của
cuộc cách mạng công nghiệp lần thứ tư (1 - động cơ hơi nước, 2 - năng lượng điện, 3 -
công nghệ thông tin). Trí Tuệ Nhân Tạo đang len lỏi vào mọi lĩnh vực trong đời sống
mà có thể chúng ta không nhận ra. Xe tự hành của Google và Tesla, hệ thống tự tag
khuôn mặt trong ảnh của Facebook, trợ lý ảo Siri của Apple, hệ thống gợi ý sản phẩm
của Amazon, hệ thống gợi ý phim của Netflix, máy chơi cờ vây AlphaGo của Google
DeepMind, , chỉ là một vài trong vô vàn những ứng dụng của AI/Machine Learning.
Machine Learning là một lĩnh vực nhỏ của Khoa Học Máy Tính, nó có khả năng
tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể.
Hình dưới minh họa sự khác nhau giữa Lập trình truyền thống và Học máy.
2. Phân loại Học máy:
Có hai cách phân loại. Cách một là dựa trên phương thức học, cách hai dựa trên
chức năng. Trong bài viết này sẽ tập trung cách phân loại thứ nhất. Với cách phân loại
này, Học máy được chia làm ba nhóm chính: Học có giám sát, học không giám sát và
học bán giám sát.
29
2.1. Học có giám sát (Supervised Learning):
là thuật toán dự đoán đầu ra của một dữ liệu mới dựa trên các cặp (input,
outcome) đã biết từ trước. Cặp dữ liệu này còn được gọi là (data, label), tức (dữ liệu,
nhãn). Supervised learning là nhóm phổ biến nhất trong các thuật toán Machine
Learning.
Một cách toán học, Supervised learning là khi chúng ra có một tập hợp biến đầu
vào X={x1,x2,,xN} và một tập hợp nhãn tương ứng Y={y1,y2,,yN}, trong đó xi,yi
là các vector. Các cặp dữ liệu biết trước (xi,yi)∈X×Y được gọi là tập training data (dữ
liệu huấn luyện). Từ tập traing data này, chúng ta cần tạo ra một hàm số ánh xạ mỗi
phần tử từ tập X sang một phần tử (xấp xỉ) tương ứng của tập Y:
Yi ≈ f(xi), ∀i=1,2,,N
Mục đích là xấp xỉ hàm số f thật tốt để khi có một dữ liệu x mới, chúng ta có thể
tính được nhãn tương ứng của nó y=f(x).
Thuật toán supervised learning còn được tiếp tục chia nhỏ ra thành hai loại chính:
Classification (Phân loại)
Một bài toán được gọi là classification nếu các label của input data được chia
thành một số hữu hạn nhóm. Ví dụ: Gmail xác định xem một email có phải là spam hay
không; các hãng tín dụng xác định xem một khách hàng có khả năng thanh toán nợ hay
không. Ba ví dụ phía trên được chia vào loại này.
Regression (Hồi quy)
Nếu label không được chia thành các nhóm mà là một giá trị thực cụ thể. Ví dụ:
một căn nhà rộng x m2, có y phòng ngủ và cách trung tâm thành phố z km sẽ có giá là
bao nhiêu?
2.2. Unsupervised Learning (Học không giám sát)
Trong thuật toán này, chúng ta không biết được outcome hay nhãn mà chỉ có dữ
liệu đầu vào. Thuật toán unsupervised learning sẽ dựa vào cấu trúc của dữ liệu để thực
hiện một công việc nào đó, ví dụ như phân nhóm (clustering) hoặc giảm số chiều của dữ
liệu (dimension reduction) để thuận tiện trong việc lưu trữ và tính toán.
Một cách toán học, Unsupervised learning là khi chúng ta chỉ có dữ liệu vào X mà
không biết nhãn Y tương ứng.
Những thuật toán loại này được gọi là Unsupervised learning vì không giống như
Supervised learning, chúng ta không biết câu trả lời chính xác cho mỗi dữ liệu đầu vào.
30
Cụm không giám sát được đặt tên theo nghĩa này.
Các bài toán Unsupervised learning được tiếp tục chia nhỏ thành hai loại:
2.3. Reinforcement Learning (Học Củng Cố)
Reinforcement learning là các bài toán giúp cho một hệ thống tự động xác định
hành vi dựa trên hoàn cảnh để đạt được lợi ích cao nhất (maximizing the performance).
Hiện tại, Reinforcement learning chủ yếu được áp dụng vào Lý Thuyết Trò Chơi (Game
Theory), các thuật toán cần xác định nước đi tiếp theo để đạt được điểm số cao nhất.
3. Xây dựng module giải quyết bài toán dự đoán giá bất động sản.
3.1. Hướng giải quyết:
Bài toán này là bài toán học có giám sát. Tôi chọn model hồi quy tuyến tính để
tính toán giá nhà đất. Bản chất của hồi quy chính là tìm ra mối quan hệ nào đó giữa biến
phụ thuộc y (dependence) (giá nhà đất) và một hay nhiều biến độc lập x (independence)
(các thuộc tính của ngôi nhà).
y = θ3*x3 + θ2*x2+θ1*x1+θ0.
y là giá trị căn hộ
x1, x2, x3 là các biến tương ứng với số phòng ngủ, diện tích, khoảng cách tới trung
tâm.
θ0, θ1, θ2, θ3 là các trọng số (cần được tùy chỉnh để tìm ra giá trị y khớp nhất với dữ
liệu huấn luyện).
3.2. Yêu cầu hệ thống:
Hệ thống cần được cài đặt các gói sau:
- Python (phiên bản hiện tại 3.8.2)
- Scikit learn: (viết tắt là sklearn) là một thư viện mã nguồn mở dành cho
Machine Learning và cũng được sử dụng trong Data Science. Đây là công cụ rất mạnh
mẽ và thông dụng với cộng đồng Python, được thiết kế trên nền NumPy và SciPy.
Scikit-learn chứa hầu hết các thuật toán Machine Learning hiện đại nhất, đi kèm với
documentations, luôn được cập nhật. Công cụ này cung cấp việc sử dụng API và tìm
kiếm ngẫu nhiên dễ dàng. Nhưng lợi thế chính trong việc sử dụng Scikit-Learn, là tốc
độ trong khi thực hiện các đánh giá khác nhau trong bộ dataset.
31
- Các gói hỗ trợ: pip, wheel, pandas
3.3. Các bước thực hiện:
3.3.1. Đọc dữ liệu đầu vào:
Dữ liệu được lưu trong file home_data.cvs, trong đó lưu rất nhiều thuộc tính của
nhà đất và giá của chúng, một số thuộc tính đặc trưng như:
Num_bed: số phòng ngủ
Year_built: năm xây dựng
Longtitude, latitude: Kinh độ, vĩ độ của nhà đất
32
Num_room: số phòng
Num_bath: số phòng tắm
Living_area: diện tích nhà đất
import os
import pandas as pd
def getData():
# Get home data from CSV file
dataFile = None
if os.path.exists('C:/Python382/AddedByMe/regression/home_data.csv'):
print("-- home_data.csv found locally")
dataFile = pd.read_csv('C:/Python382/AddedByMe/regression/home_data.csv',
skipfooter=1)
return dataFile
Hàm trên sử dụng thư viện Pandas để load dữ liệu từ file CSV vào dưới dạng
DataFrame
3.3.2. Lựa chọn thuộc tính và phân chia tập dữ liệu mẫu
Tư tưởng của chúng ta là sẽ phân chia tập dữ liệu mẫu thành hai tập con là tập dữ
liệu huấn luyện và tập dữ liệu kiểm tra. Việc này sử dụng tư tưởng của kiểm tra chéo
(cross validation). Ngoài ra, trong tập dữ liệu mẫu có rất nhiều thuộc tính có ý nghĩa và
có thể khai thác thêm, ví dụ như từ kinh độ và vĩ độ chúng ta có thể tìm thêm các thuộc
tính như khoảng cách trung tâm thành phố, số bệnh viện lân cận... Tuy nhiên để cho đơn
giản, chúng ta lựa chọn một cách chủ quan một số thuộc tính mà mình cho rằng có thể có
ảnh hưởng đến giá của bất động sản như số phòng ngủ, số phòng tắm, năm xây dựng và
diện tích...
if __name__ == "__main__":
data = getData()
if data is not None:
# Selection few attributes
33
attributes = list(
[
'num_bed',
'year_built',
'num_room',
'num_bath',
'living_area',
]
)
# Vector price of house
Y = data['askprice']
# print np.array(Y)
# Vector attributes of house
X = data[attributes]
# Split data to training test and testing test
X_train, X_test, Y_train, Y_test = train_test_split(np.array(X), np.array(Y),
test_size=0.2)
Đoạn code bên trên phân chia tập dữ liệu thành 80% cho training và 20% cho
testing. Việc cần làm tiếp theo là viết một hàm chạy Phương pháp hồi quy tuyến tính.
3.3.3. Áp dụng mô hình hồi quy tuyến tính
Về cơ bản, việc huấn luyện theo mô hình tuyến tính bản chất là đi tìm các giá
trị m và b sao cho cực tiểu hóa hàm lỗi sau:
Chúng ta sử dụng gói thư viện Scikit-learn của Python để làm việc này như sau:
def linearRegressionModel(X_train, Y_train, X_test, Y_test):
linear = linear_model.LinearRegression()
# Training process
linear.fit(X_train, Y_train)
# Evaluating the model
score_trained = linear.score(X_test, Y_test)
return score_trained
Hàm trên chạy mô hình hồi quy tuyến tính trên tập dữ liệu huấn luyện
gồm X_train đại diện cho tập các thuộc tính của bất động sản và Y_train đại diện cho giá
của nhà. Hàm trả về một giá trị đánh giá điểm của mô hình khi chạy trên tập kiểm tra. Có
nghĩa là điểm càng tiến gần đến 1 thì mô hình của chúng ta càng tốt.
3.3.4. Áp dụng mô hình hồi quy LASSO dạng chuẩn L1
Các dạng chuẩn (Regularization) thường được đưa vào các mô hình để nhằm giảm
thiểu hiện tượng over-fitting. Over-fitting xảy ra khi một mô hình của chúng ta lựa chọn
34
đang cố gắng giảm thiểu tối đa lỗi trên tập dữ liệu huấn luyện nhưng nó lại làm cho lỗi
trên tập dữ liệu kiểm tra tăng lên. Và LASSO ra đời để hạn chế điều đó. Nó bổ sung
thêm vào hàm lỗi của mô hình tuyến tính một đại lượng phạt lỗi lamda.
Chúng ta viết một hàm tính toán điểm của phương pháp LASSO như sau:
def lassoRegressionModel(X_train, Y_train, X_test, Y_test):
lasso_linear = linear_model.Lasso(alpha=1.0)
# Training process
lasso_linear.fit(X_train, Y_train)
# Evaluating the model
score_trained = lasso_linear.score(X_test, Y_test)
return score_trained
3.3.5. Đánh giá hai mô hình hồi quy vừa áp dụng
Trong hàm main chúng ta chạy và so sánh hai hàm như sau:
# Linear Regression Model
linearScore = linearRegressionModel(X_train, Y_train, X_test, Y_test)
print ('Linear Score = ' , linearScore)
# LASSO Regression Model
lassoScore = lassoRegressionModel(X_train, Y_train, X_test, Y_test)
print ('Lasso Score = ', lassoScore)
Kết quả chạy như sau:
4. Kết luận:
Hồi quy là một phương pháp khá đơn giản để áp dụng. Song kết quả trên (~ 0.6)
cần được cải thiện hơn nữa bằng cách kết hợp với các kĩ thuật khác. Trong các bài
nghiên cứu tiếp theo, các kĩ thuật nâng cao sẽ được nghiên cứu tính toán để cải thiện
thuật toán.
TÀI LIỆU THAM KHẢO
[1] Vũ Hữu Tiệp, Machine Learning cơ bản, 02/2018.
[2] NguyenDuong, Linear Regression – Hồi quy tuyến tính trong Machine
Learning,
35
[3] Jason Brownlee, Metrics to evaluate machine learning algoriths in Python,
[Online], https://machinelearningmastery.com/metrics-evaluate-machine-
learningalgorithms-python/, 05/2016
[4] Phạm Văn Toàn, Mô hình hồi quy ứng dụng trong bài toán dự đoán giá bất
động sản - Machine Learning (phần 2), [Online] https://viblo.asia/p/mo-hinh-hoi-quy-
ung-dung-trong-bai-toan-du-doan-gia-bat-dong-san-machine-learning-phan-2-
xQMkJLrzGam
[5] Alvira Swalin, Choosing the right metric for evaluation Machine Learning
Models – Part 1, [Online], https://medium.com/usf-msds/choosing-the-right-metric-
formachine-learning-models-part-1-a99d7d7414e4, 07/2018.
[6] Nguyễn Phúc Lương, Machine Learning – Linear Regression with one
variable, [Online] https://viblo.asia/p/machine-learning-linear-regression-with-one-
variable-yMnKMqdgK7P, 05/2017
[7] Nguyễn Thành Nam, Giới thiệu về kỹ thuật xuống dốc, [Online],
https://www.vithon.org/2018/04/may-hoc-pho-thong-2.html, 04/2018.
[8] Christian Pascual, Understanding regression error metrics, [Online],
https://www.dataquest.io/blog/understanding-regression-error-metrics, 09/2018.