관리 메뉴

솜씨좋은장씨

데이콘 X AI 프렌즈 온도추정 경진대회 도전 2회차 본문

DACON/AI프렌즈 시즌1 온도 추정 경진대회

데이콘 X AI 프렌즈 온도추정 경진대회 도전 2회차

솜씨좋은장씨 2020. 3. 13. 17:12
728x90
반응형

데이콘! 온도추정 경진대회! 도전 2회차입니다.

 

[공공] AI프렌즈 시즌1 온도 추정 경진대회

출처 : DACON - Data Science Competition

dacon.io

오늘은 사용하는 데이터를 늘려보고 다중 선형회귀 분석 방법도 활용해보았습니다.

 

먼저 어떤 데이터를 추가할까 고민해보면서 대회 설명으로가서 대회의 배경을 다시 읽어보았습니다.

저가의 센서로 온도를 측정하였고 우리는 그 저가의 센서들 중 하나의 결과를 예측해야합니다.

 

주어진 데이터는 다음과 같습니다.

대회 도전 전에 히트맵을 통해서 센서와 기온의 상관관계가 높다는 것을 알게되었고

Y18센서의 데이터가 있는 3일치의 기온데이터와 센서 데이터를 가지고 첫날 결과를 내고 제출을 해보았습니다.

 

먼저 상관 관계가 낮은 데이터도 예측에 많이 활용하는지 멀티캠퍼스에서 같이 자연어처리 교육을 들으면서 알게되었던

통계학과 누나에게 물어보았습니다.

이전에 히트맵을 그려보고 상관관계가 낮지만 그래도 어느정도 상관관계가 있어보이는 데이터는 다음과 같았습니다.

이중에서 오늘은 일일 누적 일사량을 활용해보기로 했습니다.

plt.figure(figsize=(30, 10))
plt.plot(train.loc[:, ['X11', 'X34','X32', 'Y17']].dropna())
plt.legend(['X11', 'X34','X32', 'Y17'])

X11, X34 (일일 누적 일사량) / X32 (기온) / Y17 (센서) 데이터 결과로 그려보기

X11 (일일 누적 일사량) - 파란색 / X34 (일일 누적 일사량) - 주황색 / X32 (기온) - 초록색 / Y17 (센서) - 빨간색

plt.figure(figsize=(30, 10))
plt.plot(train.loc[:, ['X11', 'X34','X32', 'Y18']].dropna())
plt.legend(['X11', 'X34','X32', 'Y18'])

X11, X34 (일일 누적 일사량) / X32 (기온) / Y18 (센서) 데이터 결과로 그려보기

X11 (일일 누적 일사량) - 파란색 / X34 (일일 누적 일사량) - 주황색 / X32 (기온) - 초록색 / Y18 (센서) - 빨간색

 

 

먼저 데이터에서 사용할 열만 추출했습니다.

data = train.loc[:, ['X00', 'X07', 'X11','X28', 'X31', 'X32', 'X34', 'Y18']].dropna()
data

X_train = data.loc[:, ['X00', 'X07', 'X11', 'X28', 'X31', 'X32', 'X34']]
Y_train = data['Y18']

X_train.shape, Y_train.shape

 

첫번째 제출

from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(1, input_dim=7, activation='relu'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, Y_train, epochs=20, batch_size=32, validation_split=0.1)

:

X_test = test.loc[:, ['X00', 'X07', 'X11','X28', 'X31', 'X32', 'X34']]
X_test.shape

predict = model.predict(X_test)
predict_labels = []

for i in range(len(predict)):
  predict_labels.append(predict[i][0])

ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_02_1.csv", index=False)

결과

 

뭔가 더 좋은 결과가 나오지도 않고 학습시 acc가 너무 낮거나 loss가 nan값이 나오는 경우가 있었습니다.

 

이번에는 sklearn의 LinearRegression 모델을 활용해보았습니다.

 

두번째 제출

from sklearn.linear_model import LinearRegression

mlr = LinearRegression()
mlr.fit(X_train, Y_train)

predict = mlr.predict(X_test)
predict_labels = predict


ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_02_2.csv", index=False)

결과

 

세번째 제출

이번에는 다시 그냥 기온데이터만 활용해 보았습니다.

X_train = data.loc[:, ['X00', 'X07', 'X28', 'X31', 'X32']]
Y_train = data['Y18']

X_train.shape, Y_train.shape

X_test = test.loc[:, ['X00', 'X07','X28', 'X31', 'X32']]
X_test.shape

from sklearn.linear_model import LinearRegression

mlr = LinearRegression()
mlr.fit(X_train, Y_train)

predict = mlr.predict(X_test)
predict_labels = predict


ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_02_3.csv", index=False)

결과

 

2회차 결과

 

앞으로 Y00 ~ Y17의 데이터와 기상청 데이터를 활용하여

Y18의 데이터가 있는 3일동안에 존재하지 않는 Y00 ~ Y17데이터를 예측해보고

그 예측한 데이터와 Y18과 가장 비슷한 데이터를 Y18의 비어있는 구간의 데이터로 활용하여 예측해보고자 합니다.

 

또 lightGBM 같은 다른 모델들도 활용해보고자합니다.

 

읽어주셔서 감사합니다!

 

[공공] AI프렌즈 시즌1 온도 추정 경진대회

출처 : DACON - Data Science Competition

dacon.io

 

Comments