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

การปรับ Feature ด้านเวลา

ตลอดคอร์สนี้เราได้พูดถึงอันตรายของการรั่วไหลของข้อมูล (data leakage) ที่อาจเกิดขึ้นระหว่างการ train โมเดล ปัญหานี้ทำให้โมเดลแสดงค่าความแม่นยำที่ดูดีเกินจริง แต่เมื่อนำข้อมูลจริงมาใช้งาน ผลลัพธ์มักไม่เป็นไปตามที่คาดหวัง

ในแบบฝึกหัดนี้ เราจะทำให้ DAYSONMARKET สะท้อนเฉพาะข้อมูลที่มีอยู่ ณ เวลาที่ทำการพยากรณ์ กล่าวคือ หากบ้านยังอยู่ในตลาด เราไม่ทราบว่าจะอยู่อีกกี่วัน จึงต้องปรับ test_df ให้สอดคล้องกับข้อมูลที่มีอยู่จริง ณ วันที่ 2017-12-10

หมายเหตุ: ตัวอย่างนี้จะใช้ฟังก์ชัน lit() ซึ่งใช้สำหรับส่งค่าเดี่ยวในกรณีที่ฟังก์ชันคาดหวังคอลัมน์ทั้งคอลัมน์

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

Feature Engineering with PySpark

ดูคอร์ส

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

  • Import ฟังก์ชันต่อไปนี้จาก pyspark.sql.functions เพื่อใช้งานในภายหลัง ได้แก่ datediff(), to_date(), lit()
  • แปลง string วันที่ '2017-12-10' ให้เป็น date ของ PySpark โดยเรียก lit() กับค่านั้นก่อน แล้วจึงเรียก to_date()
  • สร้าง test_df โดยกรองข้อมูลที่ OFFMKTDATE มากกว่าหรือเท่ากับ split_date และ LISTDATE น้อยกว่าหรือเท่ากับ split_date โดยใช้ where()
  • แทนที่ DAYSONMARKET ด้วยการคำนวณคอลัมน์ใหม่ชื่อ DAYSONMARKET ซึ่งเป็นผลต่างระหว่าง split_date กับ LISTDATE โดยใช้ datediff() จากนั้นตรวจสอบคอลัมน์ใหม่และคอลัมน์เดิมด้วยโค้ดที่เตรียมไว้ให้

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

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

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