시간 특성 조정하기
이 강의 전반에서 학습 중 모델에 정보를 누출하는 위험성에 대해 여러 번 언급했어요. 데이터 누출은 정확도 지표를 지나치게 낙관적으로 만들지만, 실제 데이터를 적용하면 결과가 실망스러운 경우가 많아요.
이번 연습에서는 DAYSONMARKET이 예측 시점에 우리가 가진 정보만 반영하도록 하려고 해요. 즉, 집이 아직 시장에 나와 있다면 앞으로 며칠 더 나오게 될지는 알 수 없어요. 2017-12-10 기준으로 현재 보유한 정보만 반영되도록 test_df를 조정해야 해요.
참고: 이 예제에서는 lit() 함수를 사용해요. 이 함수는 함수 호출에서 전체 열이 기대되는 자리에도 단일 값을 사용할 수 있게 해줘요.
이 연습은 강의의 일부입니다
PySpark로 하는 Feature Engineering
연습 안내
- 나중에 사용할 수 있도록
pyspark.sql.functions에서 다음 함수를 임포트하세요:datediff(),to_date(),lit(). - 날짜 문자열 '2017-12-10'에 먼저 리터럴 함수
lit()를 호출한 다음to_date()를 적용해 pyspark 날짜로 변환하세요. where()를 사용해OFFMKTDATE가split_date이상이고LISTDATE가split_date이하인 행으로 필터링해test_df를 만드세요.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()