Dự đoán giá nhà ở Mỹ

Du Doan Gia Nha O My



Xây nhà là một trong những công việc khó khăn trong cuộc sống của chúng ta. Trước khi xây dựng, bạn có thể ước tính giá căn nhà của mình dựa trên giá căn nhà trước đó. Các yếu tố ảnh hưởng lớn đến giá nhà bao gồm tổng số phòng (giường, phòng tắm, v.v.) và diện tích khu đất. Bằng cách này, chúng ta có thể ước tính được ngân sách cần thiết để xây dựng ngôi nhà.

Trong hướng dẫn này, chúng ta sẽ xem cách dự đoán giá nhà ở Hoa Kỳ bằng Machine Learning thông qua Python. Đầu tiên, chúng tôi thảo luận về tập dữ liệu mà chúng tôi sử dụng và sau đó xử lý trước dữ liệu. Sau đó, chúng tôi trực quan hóa các thuộc tính có trong tập dữ liệu và áp dụng các thuật toán Machine Learning khác nhau trên tập dữ liệu huấn luyện (Seattle, Washington, tháng 8 năm 2022 – tháng 12 năm 2022). Cuối cùng, chúng tôi kết thúc hướng dẫn này bằng cách dự đoán giá của một số ngôi nhà có trong tập dữ liệu Thử nghiệm. Trước khi thực hiện dự án này, chúng ta cần hiểu các thuật ngữ Machine Learning được sử dụng trong dự án này.







hồi quy

Trong Machine Learning, nếu bạn đang làm việc với dữ liệu số, bạn cần hiểu Hồi quy. Hồi quy là một Kỹ thuật học có giám sát trong Học máy, được sử dụng để hiểu mối quan hệ giữa các thuộc tính độc lập và thuộc tính phụ thuộc (nhãn lớp/đích). Máy dự đoán giá nhà bằng cách tìm hiểu từng bản ghi có trong tập dữ liệu. Do đó, nó là một học tập có giám sát.



Ví dụ: trong kịch bản của chúng tôi, các thuộc tính độc lập là số giường, số phòng tắm, diện tích đất, mã zip, v.v. Dựa trên những thuộc tính này, chúng tôi có thể dự đoán giá nhà của mình. Vì vậy, đây là những thuộc tính độc lập không phụ thuộc vào bất cứ thứ gì. Giá là thuộc tính mục tiêu hoặc nhãn lớp phụ thuộc vào các thuộc tính này.



1. Hồi quy tuyến tính

Thuật toán hồi quy tuyến tính thể hiện mối quan hệ tuyến tính giữa các biến thuộc tính phụ thuộc (Y) và thuộc tính độc lập (X). Về mặt toán học, chúng ta có thể đánh giá nó như sau:





= aX+b

Ở đây, “a” và “b” là các hệ số tuyến tính.

Trong Python, LinearRegression() có sẵn trong mô-đun “sklearn.Tuyến_model”. Chúng ta sẽ xem cách xác định điều này trong khi thực hiện dự án. Sau đây là mô hình với các tham số:



2. Cây quyết định

Về cơ bản, Cây Quyết định là một biểu diễn đồ họa để nhận tất cả các giải pháp có thể có cho một vấn đề dựa trên các điều kiện được cung cấp bằng cách sử dụng các nút. Nút Quyết định được sử dụng để đưa ra quyết định và nút Lá đề cập đến đầu ra của một quyết định cụ thể. Chúng ta có thể dự đoán giá căn nhà của mình bằng Công cụ hồi quy Cây quyết định.

Trong Python, DecisionTreeRegressor có sẵn trong mô-đun “sklearn.tree”. Chúng ta sẽ xem cách xác định điều này trong khi thực hiện dự án. Sau đây là mô hình với các tham số:

3. Rừng ngẫu nhiên

Rừng ngẫu nhiên thực hiện chức năng tương tự như Cây quyết định. Nhưng phải mất một Rừng (bộ sưu tập Cây quyết định) và kết hợp (giá trị trung bình) tất cả đầu ra của Cây quyết định. Ví dụ: kích thước Rừng ngẫu nhiên là 3. Vì vậy, trong nội bộ, ba Cây quyết định được tạo và kết quả Giá nhà của Cây quyết định đầu tiên là 20000. Kết quả Giá nhà của Cây quyết định thứ hai là 20000. Và kết quả Giá nhà của Cây quyết định thứ hai là 20000. Và kết quả Giá nhà của Cây quyết định thứ hai là 20000. Cây quyết định cuối cùng là 10000. 16.666,666 là kết quả cuối cùng ((20000+20000+10000)/3).

Trong Python, RandomForestRegressor có sẵn trong mô-đun “sklearn.ensemble”. Sau đây là mô hình với các tham số. Chúng ta có thể chỉ định số lượng cây trong tham số “n_estimators”. Nó là 100 theo mặc định.

Thực hiện

Xem nhanh các bước liên quan đến việc dự đoán giá Nhà ở Hoa Kỳ. Chúng tôi xem xét tập dữ liệu homes_train (tệp CSV) với các bản ghi năm 2016 (được sử dụng để đào tạo mô hình Machine Learning). Sau đó, chúng tôi dự đoán bản ghi giá của ngôi nhà (505) có trong tệp house_test.

1. Đang tải bộ dữ liệu huấn luyện và kiểm tra

Pandas là mô-đun có sẵn trong Python được sử dụng để phân tích dữ liệu. Chúng tôi sử dụng mô-đun này để tải bộ dữ liệu vào Môi trường Python. Ở đây, chúng tôi sử dụng Công ty Google như Môi trường Mã. Điều này có sẵn miễn phí. Chỉ cần một tài khoản Google.

Trước tiên, chúng ta cần tải các tệp từ PC cục bộ sang Colab Env. Tải xuống bộ dữ liệu từ đây .

# Tải tệp house_train.csv và house_test.csv lên Google Colab của bạn

# lân lượt tưng ngươi một.

từ Google. ET AL nhập khẩu các tập tin

các tập tin. tải lên ( )

read_csv() là hàm được sử dụng để tải dữ liệu CSV vào một biến. Nó lấy tên tập tin làm tham số.

nhập khẩu gấu trúc

# Tải homes_train.csv vào biến train_data

dữ liệu tàu = gấu trúc. đọc_csv ( 'houses_train.csv' )

# Nạp house_test.csv vào biến test_data

dữ liệu kiểm tra = gấu trúc. đọc_csv ( 'house_test.csv' )

# Lưu trữ test_data vào biến test_data1

test_data1 = dữ liệu kiểm tra

Hãy xem các cột và số lượng bản ghi không null trong mỗi cột. Pandas.DataFrame.info() được sử dụng để lấy thông tin này.

in ( tàu_data. thông tin ( ) )

in ( test_data1. thông tin ( ) )

Đầu ra:

2. Tiền xử lý dữ liệu

Trong cả hai tập dữ liệu, cột “lot_size” chứa các giá trị bằng sqft và acre (Bạn sẽ tìm thấy sự khác biệt bằng cách xem các hàng trong cột “lot_size_unit’s”). Nhưng định dạng phải ở dạng sqft. Vì vậy, chúng ta cần chuyển đổi các giá trị trong cột “lot_size” từ mẫu Anh sang mét vuông. Tương tự, điều này được thực hiện đối với “test_data1”.

DataFrame.loc[] được sử dụng ở đây để tìm “lot_size_units” với “acre” và nhân giá trị có trong “lot_size” với 43560.

# Chuyển đổi các giá trị lô_size acre thành Feet vuông trong train_data

tàu_data. địa điểm [ ( dữ liệu tàu [ 'lot_size_units' ] == 'mẫu Anh' ) , 'lot_size' ] = dữ liệu tàu [ 'lot_size' ] * 43560

# Chuyển đổi giá trị lô_size acre thành Feet vuông trong test_data1

test_data1. địa điểm [ ( test_data1 [ 'lot_size_units' ] == 'mẫu Anh' ) , 'lot_size' ] = test_data1 [ 'lot_size' ] * 43560

in ( tàu_data. cái đầu ( ) )

in ( test_data1. cái đầu ( ) )

Đầu ra:

Bây giờ, bạn sẽ thấy rằng tất cả các giá trị trong cột “lot_size” đều là giá trị sqft.

Bạn thấy một số giá trị bị thiếu trong cột này. Hãy thay thế các giá trị NaN có trong các cột bằng giá trị trung bình của cùng một cột trong cả hai tập dữ liệu.

DataFrame['column_name'].fillna() được sử dụng để điền giá trị trung bình vào các giá trị còn thiếu bằng cách sử dụng hàm Mean(). DataFrame['column_name'].mean() được truyền dưới dạng tham số cho hàm finna(). Hãy hiển thị giá trị trung bình và xem số đếm ngay bây giờ:

# Điền vào các giá trị còn thiếu trong cột lot_size bằng Giá trị trung bình của các giá trị hiện có

dữ liệu tàu [ 'lot_size' ] = dữ liệu tàu [ 'lot_size' ] . cảm thấy ( dữ liệu tàu [ 'lot_size' ] . nghĩa là ( ) )

# Hiển thị trung bình

in ( 'Dữ liệu huấn luyện Giá trị trung bình: ' , dữ liệu tàu [ 'lot_size' ] . nghĩa là ( ) )

in ( chỉ một ( dữ liệu tàu [ 'lot_size' ] ) )

# Điền vào các giá trị còn thiếu trong cột lot_size bằng Giá trị trung bình của các giá trị hiện có

test_data1 [ 'lot_size' ] = test_data1 [ 'lot_size' ] . cảm thấy ( test_data1 [ 'lot_size' ] . nghĩa là ( ) )

# Hiển thị trung bình

in ( 'Dữ liệu thử nghiệm Giá trị trung bình: ' , test_data1 [ 'lot_size' ] . nghĩa là ( ) )

in ( chỉ một ( test_data1 [ 'lot_size' ] ) )

Đầu ra:

Các giá trị bị thiếu có trong Tập dữ liệu tàu hỏa cột “lot_size” được thay thế bằng giá trị trung bình của 18789.95194 và các giá trị bị thiếu có trong Tập dữ liệu thử nghiệm cột “lot_size” được thay thế bằng giá trị trung bình của 8961.0

3. Làm sạch dữ liệu

Trong khi huấn luyện mô hình, có một số thuộc tính không cần thiết không bắt buộc phải có để dự đoán kết quả. Trong trường hợp của chúng tôi, có ba thuộc tính là “lot_size_units”, “zip_code” và “size_units” cần bị xóa khỏi cả hai tập dữ liệu. pandas.DataFrame.drop() được sử dụng để xóa ba cột này khỏi cả hai tập dữ liệu.

dữ liệu tàu = tàu_data. làm rơi ( [ 'lot_size_units' , 'Mã Bưu Chính' , 'kích thước_đơn vị' ] , trục = 1 )

test_data1 = test_data1. làm rơi ( [ 'lot_size_units' , 'Mã Bưu Chính' , 'kích thước_đơn vị' ] , trục = 1 )

in ( tàu_data. thông tin ( ) )

in ( test_data1. thông tin ( ) )

Đầu ra:

Bây giờ, các bộ dữ liệu đang ở trạng thái tốt. Các cột không cần thiết sẽ bị xóa và các giá trị còn thiếu không tồn tại.

4. Trực quan hóa dữ liệu

Hãy tạo biểu đồ cho các cột của dữ liệu Train. Hàm pandas.DataFrame.hist() được sử dụng để tạo biểu đồ cho tất cả các thuộc tính.

tàu_data. lịch sử ( kích thước nhỏ = ( 4 , 9 ) )

Đầu ra:

Biểu đồ được tạo cho các cột giường, phòng tắm, kích thước, kích thước lô và giá cho dữ liệu Tàu hỏa.

Hãy tạo sự tương quan giữa tất cả các lĩnh vực với nhau. Mô-đun Plotly.express được sử dụng để vẽ các giá trị tương quan.

nhập khẩu âm mưu. thể hiện

đúng = tàu_data. đúng ( )

# Vẽ biểu đồ dữ liệu tương quan

view_fig = âm mưu. thể hiện . imshow ( đúng , text_auto = ĐÚNG VẬY )

# Trưng bày

view_fig. trình diễn ( )

Đầu ra:

  1. Giường có tương quan 0,2935 với giá, -0,059 tương quan với kích thước lô, 0,77 tương quan với kích thước và 0,65 tương quan với phòng tắm.
  2. Số bồn tắm tương quan 0,3173 với giá, -0,054 tương quan với kích thước lô, 0,667 tương quan với số bồn tắm và 0,771 tương quan với giường.
  3. Kích thước tương quan là 0,444 với giá, -0,044 tương ứng với kích thước lô, 0,667 tương quan với kích thước và 0,652 tương ứng với giường.

5. Chuẩn bị mô hình

Chúng ta cần đặt giá làm mục tiêu bằng cách xóa giá đó khỏi train_data. Đảm bảo rằng các thuộc tính có trong dữ liệu Đào tạo và Kiểm tra phải giống nhau trong giai đoạn này.

mục tiêu = dữ liệu tàu [ 'giá' ]

dữ liệu tàu = tàu_data. làm rơi ( [ 'giá' ] , trục = 1 )

in ( tàu_data. thông tin ( ) )

in ( test_data1. thông tin ( ) )

Đầu ra:

Bây giờ, có bốn thuộc tính độc lập (giường, phòng tắm, kích thước và size_size) và giá là thuộc tính phụ thuộc vào bốn thuộc tính này.

6. Đào tạo người mẫu

Đầu tiên, chúng tôi áp dụng thuật toán RandomForestRegressor. Nhập nó từ gói “sklearn.ensemble”. Đó là một kỹ thuật hòa trộn.

  1. Tạo mô hình từ RandomForestRegressor(). Chúng tôi không chuyển bất kỳ tham số nào cho mô hình này. Vì vậy, số lượng Cây quyết định theo mặc định là 100.
  2. Sử dụng phương thức fit() để điều chỉnh mô hình. Phải mất hai tham số. Tham số đầu tiên là các thuộc tính phụ thuộc và tham số thứ hai là nhãn lớp/đích.
  3. Sử dụng phương thức Score() để xem Độ chính xác của mô hình. Nó cũng có các tham số tương tự như phương thức fit().
từ đã học quần thể nhập khẩu Ngẫu nhiênRừngRegressor

# Xác định Model

mô hình1 = Ngẫu nhiênRừngRegressor ( )

# Phù hợp với mô hình

mô hình1. phù hợp ( dữ liệu tàu , mục tiêu )

# Độ chính xác của mô hình

in ( mô hình1. điểm ( dữ liệu tàu , mục tiêu ) * 100 )

Đầu ra:

86.08400889419033

7. Kiểm tra mô hình và lưu trữ kết quả

Đây là bước cuối cùng mà chúng ta cần dự đoán kết quả và lưu trữ chúng.

  1. Phương thức dự đoán() được sử dụng để dự đoán dữ liệu Kiểm tra. Nó được sử dụng với mô hình và lấy danh sách các giá trị/DataFrame lồng nhau.
  2. Sử dụng phương thức to_csv() để lưu trữ kết quả vào tệp CSV.
  3. Tải xuống tệp từ môi trường Python (Google Colab).
# Dự đoán test_data1 bằng model1.

dữ liệu kiểm tra [ 'Giá' ] = mô hình1. dự đoán ( test_data1 )

# Lưu test_data vào test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Tải tệp này xuống từ Colab

các tập tin. Tải xuống ( 'test_results.csv' )

Đầu ra:

Hãy hiển thị 20 bản ghi trong số 505 bản ghi. Bạn có thể thấy cột Giá chứa các giá trị dự đoán cho mỗi ngôi nhà.

Người mẫu khác

Hãy dự đoán các ngôi nhà bằng DecisionTreeRegressor. Bạn có thể nhập nó từ mô-đun “sklearn.tree”.

từ đã học cây nhập khẩu Quyết ĐịnhCâyRegressor

# Xác định Model

mô hình2 = Quyết ĐịnhCâyRegressor ( )

# Phù hợp với mô hình

mô hình2. phù hợp ( dữ liệu tàu , mục tiêu )

# Độ chính xác của mô hình

in ( mô hình2. điểm ( dữ liệu tàu , mục tiêu ) * 100 )

# Dự đoán test_data1 bằng model1.

dữ liệu kiểm tra [ 'Giá' ] = mô hình2. dự đoán ( test_data1 )

# Lưu test_data vào test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Tải tệp này xuống từ Colab

các tập tin. Tải xuống ( 'test_results.csv' )

Đầu ra:

99.94183165335028

Bạn có thể xem kết quả dự đoán ở đây:

Hãy dự đoán các ngôi nhà bằng cách sử dụng LinearrEgression. Nhập mô hình từ mô-đun “sklearn.Tuyến_model”.

từ đã học mô hình tuyến tính nhập khẩu Hồi quy tuyến tính

# Xác định Model

mô hình3 = Hồi quy tuyến tính ( )

# Phù hợp với mô hình

mô hình3. phù hợp ( dữ liệu tàu , mục tiêu )

# Dự đoán test_data1 bằng model1.

dữ liệu kiểm tra [ 'Giá' ] = mô hình3. dự đoán ( test_data1 )

# Lưu test_data vào test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Tải tệp này xuống từ Colab

các tập tin. Tải xuống ( 'test_results.csv' )

Bạn có thể xem kết quả dự đoán ở đây:

Phần kết luận

Giờ đây, bạn có thể dự đoán giá căn nhà của mình dựa trên các thuộc tính như số phòng, diện tích đất của bạn, v.v. Trong hướng dẫn này, chúng tôi đã xem xét dữ liệu ngôi nhà thực tế từ Seattle, Washington. Sử dụng các kỹ thuật hồi quy như Hồi quy tuyến tính, Cây quyết định và Rừng ngẫu nhiên, chúng tôi đã dự đoán giá của 505 căn nhà. Tất cả các bước (Xử lý trước dữ liệu, Làm sạch dữ liệu và Trực quan hóa dữ liệu) phải được thực hiện trước khi đào tạo mô hình đều được giải thích từng bước bằng các đoạn mã và kết quả đầu ra.