Bắt đầu ngayBắt đầu miễn phí

Tạo các mốc tách theo thời gian

Trong video, bạn đã thấy vì sao việc chia dữ liệu ngẫu nhiên có thể nguy hiểm với chuỗi thời gian: dữ liệu từ tương lai có thể khiến mô hình bị overfitting. Với chuỗi thời gian, bạn thường nhận thêm dữ liệu mới khi chúng xuất hiện và muốn huấn luyện lại mô hình với dữ liệu mới nhất. Trong video, chúng ta đã minh họa cách tách theo tỷ lệ cho tập huấn luyện và kiểm tra, nhưng giả sử bạn muốn huấn luyện trên toàn bộ dữ liệu sẵn có, ngoại trừ 45 ngày cuối cùng để làm tập kiểm tra.

Trong bài tập này, bạn sẽ tạo một hàm để tìm ngày tách nhằm dùng 45 ngày cuối làm kiểm tra và phần còn lại làm huấn luyện. Lưu ý rằng timedelta() đã được nhập sẵn cho bạn từ thư viện chuẩn pythondatetime.

Bài tập này là một phần của khóa học

Feature Engineering với PySpark

Xem khóa học

Hướng dẫn bài tập

  • Tạo hàm train_test_split_date() nhận vào một dataframe df, cột ngày dùng để tách split_col và số ngày dùng cho tập kiểm tra test_days với giá trị mặc định là 45.
  • Tìm ngày minmax cho split_col bằng ,().
  • Tìm ngày để tách tập kiểm tra và huấn luyện bằng cách lấy max_date rồi trừ đi test_days với timedelta() (nhận tham số days), ở đây truyền vào test_days.
  • Dùng OFFMKTDATE làm split_col, tìm split_date và dùng nó để lọc dataframe thành hai dataframe mới, train_dftest_df, trong đó test_df chỉ gồm 45 ngày cuối của dữ liệu. Ngoài ra, đảm bảo test_df chỉ chứa các căn nhà đã được đăng tính đến ngày tách bằng cách lọc df['LISTDATE'] nhỏ hơn hoặc bằng split_date.

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.

def train_test_split_date(df, split_col, test_days=____):
  """Calculate the date to split test and training sets"""
  # Find how many days our data spans
  max_date = df.____({____: ____}).collect()[0][0]
  min_date = df.____({____: ____}).collect()[0][0]
  # Subtract an integer number of days from the last date in dataset
  split_date = ____ - timedelta(days=____)
  return split_date

# Find the date to use in spitting test and train
split_date = train_test_split_date(df, ____)

# Create Sequential Test and Training Sets
____ = df.where(df[____] < split_date) 
____ = df.where(df[____] >= split_date).where(df[____] <= split_date) 
Chỉnh sửa và Chạy Mã