Menyesuaikan Fitur Waktu
Sepanjang kursus ini kita telah membahas beberapa risiko kebocoran informasi ke dalam model saat pelatihan. Kebocoran data akan membuat metrik akurasi model tampak sangat optimistis, tetapi ketika data nyata dijalankan hasilnya sering kali mengecewakan.
Dalam latihan ini, kita akan memastikan bahwa DAYSONMARKET hanya mencerminkan informasi yang kita miliki pada saat melakukan prediksi nilai. Artinya, jika rumah masih dipasarkan, kita tidak tahu berapa hari lagi rumah tersebut akan tetap di pasar. Kita perlu menyesuaikan test_df agar mencerminkan informasi yang saat ini kita miliki per 2017-12-10.
CATATAN: Contoh ini akan menggunakan fungsi lit(). Fungsi ini digunakan untuk memasukkan nilai tunggal ketika sebuah pemanggilan fungsi mengharapkan seluruh kolom.
Latihan ini adalah bagian dari kursus
Rekayasa Fitur dengan PySpark
Petunjuk latihan
- Impor fungsi berikut dari
pyspark.sql.functionsuntuk digunakan nanti:datediff(),to_date(),lit(). - Konversikan string tanggal '2017-12-10' menjadi tanggal pyspark dengan terlebih dahulu memanggil fungsi literal
lit()padanya laluto_date() - Buat
test_dfdengan memfilterOFFMKTDATEyang lebih besar atau sama dengansplit_datedanLISTDATEyang kurang dari atau sama dengansplit_datemenggunakanwhere(). - Ganti
DAYSONMARKETdengan menghitung kolom baru bernamaDAYSONMARKET; kolom baru ini harus merupakan selisih antarasplit_datedanLISTDATE. Gunakandatediff()untuk melakukan perhitungan tanggal. Periksa kolom baru dan kolom asli menggunakan kode yang disediakan.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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()