เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การแบ่งข้อมูลตามเวลา

จากวิดีโอ เราได้เรียนรู้ว่าการแบ่งข้อมูลแบบสุ่มอาจเป็นอันตรายสำหรับข้อมูลอนุกรมเวลา เนื่องจากข้อมูลในอนาคตอาจทำให้โมเดลเกิด overfitting ได้ โดยทั่วไปแล้ว เมื่อมีข้อมูลอนุกรมเวลา คุณจะได้รับข้อมูลใหม่เมื่อพร้อมใช้งาน และอาจต้องการเทรนโมเดลใหม่โดยใช้ข้อมูลล่าสุด ในวิดีโอ เราได้แสดงวิธีแบ่งชุดทดสอบและชุดฝึกสอนแบบเปอร์เซ็นต์ แต่สมมติว่าต้องการเทรนโมเดลด้วยข้อมูลทั้งหมดที่มี ยกเว้น 45 วันสุดท้ายที่จะใช้เป็นชุดทดสอบ

ในแบบฝึกหัดนี้ เราจะสร้างฟังก์ชันเพื่อหาวันที่แบ่งข้อมูล โดยใช้ข้อมูล 45 วันสุดท้ายสำหรับการทดสอบ และข้อมูลที่เหลือสำหรับการฝึกสอน โปรดทราบว่า timedelta() ได้ถูก import ไว้แล้วจากไลบรารีมาตรฐาน datetime ของ python

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Feature Engineering with PySpark

ดูคอร์ส

คำแนะนำการฝึกหัด

  • สร้างฟังก์ชัน train_test_split_date() ที่รับ dataframe ชื่อ df, คอลัมน์วันที่ที่ใช้แบ่งข้อมูล split_col และจำนวนวันที่ใช้สำหรับชุดทดสอบ test_days พร้อมกำหนดค่าเริ่มต้นเป็น 45
  • หาวันที่ min และ max ของ split_col โดยใช้ ,()
  • หาวันที่สำหรับแบ่งชุดทดสอบและชุดฝึกสอน โดยใช้ max_date แล้วลบ test_days ออกด้วย timedelta() ซึ่งรับพารามิเตอร์ days โดยในกรณีนี้ให้ส่ง test_days เข้าไป
  • ใช้ OFFMKTDATE เป็น split_col เพื่อหา split_date แล้วใช้ค่านั้นกรอง dataframe ออกเป็นสอง dataframe ใหม่ คือ train_df และ test_df โดยที่ test_df มีเฉพาะข้อมูล 45 วันสุดท้าย นอกจากนี้ ให้ตรวจสอบว่า test_df มีเฉพาะบ้านที่ลงประกาศตั้งแต่วันที่แบ่งข้อมูลโดยกรอง df['LISTDATE'] ให้น้อยกว่าหรือเท่ากับ split_date

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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) 
แก้ไขและรันโค้ด