Ứ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

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ể.

pdf8 trang | Chia sẻ: thuyduongbt11 | Ngày: 11/06/2022 | Lượt xem: 440 | Lượt tải: 0download
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.