Ajustando features de tempo
Ao longo do curso, mencionamos os riscos de vazar informações para o seu modelo durante o treinamento. Data leakage fará com que seu modelo apresente métricas de acurácia muito otimistas, mas, quando dados reais forem processados, os resultados costumam ser bem decepcionantes.
Neste exercício, vamos garantir que DAYSONMARKET reflita apenas as informações que temos no momento de prever o valor. Ou seja, se a casa ainda está no mercado, não sabemos por quantos dias a mais ela ficará. Precisamos ajustar nosso test_df para refletir as informações disponíveis em 2017-12-10.
OBSERVAÇÃO: Este exemplo usará a função lit(). Essa função é empregada para permitir valores únicos onde normalmente se espera uma coluna inteira em uma chamada de função.
Este exercício faz parte do curso
Feature Engineering com PySpark
Instruções do exercício
- Importe as seguintes funções de
pyspark.sql.functionspara usar depois:datediff(),to_date(),lit(). - Converta a string de data '2017-12-10' para uma data do PySpark chamando primeiro a função literal
lit()nela e depoisto_date(). - Crie
test_dffiltrandoOFFMKTDATEmaior ou igual asplit_dateeLISTDATEmenor ou igual asplit_dateusandowhere(). - Substitua
DAYSONMARKETcalculando uma nova coluna chamadaDAYSONMARKET. A nova coluna deve ser a diferença entresplit_dateeLISTDATE; usedatediff()para realizar o cálculo de datas. Inspecione a nova coluna e a original usando o código fornecido.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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()