Điều chỉnh các đặc trưng thời gian
Xuyên suốt khóa học, chúng ta đã nhắc đến rủi ro rò rỉ thông tin vào mô hình trong quá trình huấn luyện. Data leakage sẽ khiến mô hình có các chỉ số độ chính xác quá lạc quan, nhưng khi chạy với dữ liệu thực, kết quả thường rất đáng thất vọng.
Trong bài này, chúng ta sẽ đảm bảo DAYSONMARKET chỉ phản ánh thông tin mà bạn có tại thời điểm dự đoán giá trị. Tức là, nếu ngôi nhà vẫn đang được rao bán, bạn không biết nó sẽ còn ở trên thị trường bao nhiêu ngày nữa. Chúng ta cần điều chỉnh test_df để phản ánh thông tin hiện có tính đến 2017-12-10.
LƯU Ý: Ví dụ này sẽ dùng hàm lit(). Hàm này cho phép truyền một giá trị đơn lẻ vào nơi mà thông thường một cột đầy đủ được kỳ vọng trong lời gọi hàm.
Bài tập này là một phần của khóa học
Feature Engineering với PySpark
Hướng dẫn bài tập
- Import các hàm sau từ
pyspark.sql.functionsđể dùng sau:datediff(),to_date(),lit(). - Chuyển chuỗi ngày '2017-12-10' sang kiểu date của PySpark bằng cách gọi hàm literal
lit()trên chuỗi đó rồi truyền vàoto_date(). - Tạo
test_dfbằng cách lọcOFFMKTDATElớn hơn hoặc bằngsplit_datevàLISTDATEnhỏ hơn hoặc bằngsplit_datevớiwhere(). - Thay thế
DAYSONMARKETbằng cách tính một cột mới tênDAYSONMARKET. Cột mới là hiệu giữasplit_datevàLISTDATE; dùngdatediff()để thực hiện phép tính ngày. Kiểm tra cột mới và cột gốc bằng đoạn mã đã cung cấp.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
from pyspark.sql.functions import ____, ____, ____
split_date = ____(____('2017-12-10'))
# Create Sequential Test set
test_df = df.____(df[____] >= ____).____(df[____] <= ____)
# Create a copy of DAYSONMARKET to review later
test_df = test_df.withColumn('DAYSONMARKET_Original', test_df['DAYSONMARKET'])
# Recalculate DAYSONMARKET from what we know on our split date
test_df = test_df.withColumn(____, ____(____, ____))
# Review the difference
test_df[['LISTDATE', 'OFFMKTDATE', 'DAYSONMARKET_Original', 'DAYSONMARKET']].show()