본문 바로가기
Kaggle 대회

[Santander Product Recommendation] 전혀 다른 모델 활용하기(MLP)

by 사자처럼 우아하게 2019. 12. 25.

 

 

이번에는 XGBOOST가 아닌 MLP(Multi Layer Perceptron)을 활용한 학습한 내용에 대해 포스팅하겠습니다.

이번 포스팅은 아래 링크를 참고하였으니 더 자세한 내용이나 코드를 원하시는 분은 아래 참고 바랍니다.

https://www.kaggle.com/hachemsfar/keras

 

많은 대회를 참가하지 않았지만 대회 리뷰들을 읽다보면 의외로 MLP가 좋은 성적을 거두는 경우들이 있습니다.

물론 MLP만 활용하는 것은 아니고 MLP와 다른 모델을 섞어서 다양성을 주는 겁니다. 이때 MLP를 학습시키는 게

매우 어려울때가 많습니다. 적당한 Hyperparameter들을 세팅해주지 않으면 생각처럼 학습이 잘 되지 않습니다.

 

기존에 세팅해뒀던 Baseline을 기반으로 모델만 변경하여 학습해봤습니다.

(이때 Target 값은 pd.get_dummies 를 활용해서 Dummy화를 시켜줘야 학습이됩니다.)

 

학습 결과, XGBOOST로 LB Score 0.02885까지 획득했던 것이 MLP로 모델링(epoch 150, Batchsize 10)했을 때  LB Score 0.0188로 급감했습니다. Keras로 학습한 공개 커널의 점수가 0.029인 것을 감안하고 점수가 급감한 이유를 생각해보면,  

Feature enineering 을 통한 영향인자 도출 미흡이지 않을까 싶습니다.(앞선 포스팅에서 언급한 것처럼, 영향이 가장 클것으로 보이는 lag1~3 Value만 Feature로 만들어서 학습했습니다.)

 

학습 코드는 아래 참조하세요.

 

# create model
model = Sequential()
model.add(Dense(150, input_dim=len(features), activation='relu'))
model.add(Dense(150, input_dim=150, activation='relu'))
model.add(Dense(150, input_dim=150, activation='relu'))
model.add(Dense(24, activation='softmax'))
# Compile model
reduce_lr = keras.callbacks.callbacks.ReduceLROnPlateau(monitor='loss', factor=0.2,
                              patience=5, min_lr=0.00001)

opti = keras.optimizers.Adam(learning_rate=0.01, beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(loss='categorical_crossentropy', optimizer=opti, metrics=['categorical_crossentropy'])

model.fit(x_train, y_train, nb_epoch=100, batch_size=100, callbacks=[reduce_lr])#, validation_split=0.2

 

댓글