[AICE ASSOCIATE] 네비도착시간

동훈·2025년 1월 23일

4. Address1(주소1)에 대한 분포도를 알아 보려고 합니다.

Address1(주소1)에 대해 countplot그래프로 만들고 아래 가이드에 따라 답하세요.

  • Seaborn을 활용하세요.
  • 첫번째, Address1(주소1)에 대해서 분포를 보여주는 countplot그래프 그리세요.
  • 두번째, 지역명이 없는 '-'에 해당되는 row(행)을 삭제하세요.
# 여기에 답안코드를 작성하세요.
!pip install seaborn
import seaborn as sns
import matplotlib.pyplot as plt
sns.countplot(x = 'Address1', data = df)
plt.show()

df.drop(df[df['Address1'] == '-'].index, inplace = True)

5. 실주행시간과 평균시속의 분포를 같이 확인하려고 합니다.

Time_Driving(실주행시간)과 Speed_Per_Hour(평균시속)을 jointplot 그래프로 만드세요.

  • Seaborn을 활용하세요.
  • X축에는 Time_Driving(실주행시간)을 표시하고 Y축에는 Speed_Per_Hour(평균시속)을 표시하세요.
# 여기에 답안코드를 작성하세요.
sns.jointplot(x = "Time_Driving", y = "Speed_Per_Hour", data = df)
plt.show()

6. 위의 jointplot 그래프에서 시속 300이 넘는 이상치를 발견할 수 있습니다.

jointplot 그래프에서 발견한 이상치 1개를 삭제하세요.

  • 대상 데이터프레임: df
  • jointplot 그래프를 보고 시속 300 이상되는 이상치를 찾아 해당 행(Row)을 삭제하세요.
  • 전처리 반영 후에 새로운 데이터프레임 변수명 df_temp에 저장하세요.
# 여기에 답안코드를 작성하세요.
df_temp = df.drop(df[df['Speed_Per_Hour'] > 300].index)

7. 모델링 성능을 제대로 얻기 위해서 결측치 처리는 필수입니다.

아래 가이드를 따라 결측치 처리하세요.

  • 대상 데이터프레임: df_temp
  • 결측치를 확인하는 코드를 작성하세요.
  • 결측치가 있는 행(raw)를 삭제 하세요.
  • 전처리 반영된 결과를 새로운 데이터프레임 변수명 df_na에 저장하세요.
# 여기에 답안코드를 작성하세요.
print(df_temp.isnull().sum())
df_na = df_temp.dropna()
df_na.isnull().sum()

8. 모델링 성능을 제대로 얻기 위해서 불필요한 변수는 삭제해야 합니다.

아래 가이드를 따라 불필요 데이터를 삭제 처리하세요.

  • 대상 데이터프레임: df_na
  • 'Time_Departure', 'Time_Arrival' 2개 컬럼을 삭제하세요.
  • 전처리 반영된 결과를 새로운 데이터프레임 변수명 df_del에 저장하세요.
# 여기에 답안코드를 작성하세요.
df_del = df_na.drop(columns = ['Time_Departure', 'Time_Arrival'])

9. 원-핫 인코딩(One-hot encoding)은 범주형 변수를 1과 0의 이진형 벡터로 변환하기 위하여 사용하는 방법입니다.

원-핫 인코딩으로 아래 조건에 해당하는 컬럼 데이터를 변환하세요.

  • 대상 데이터프레임: df_del
  • 원-핫 인코딩 대상: object 타입의 전체 컬럼
  • 활용 함수: pandas의 get_dummies
  • 해당 전처리가 반영된 결과를 데이터프레임 변수 df_preset에 저장해 주세요.
# 여기에 답안코드를 작성하세요.
df_del.info()
oh_cols = ['Address1', 'Address2']
df_preset = pd.get_dummies(df_del, columns = oh_cols, drop_first = True)

10. 훈련과 검증 각각에 사용할 데이터셋을 분리하려고 합니다.

Time_Driving(실주행시간) 컬럼을 label값 y로, 나머지 컬럼을 feature값 X로 할당한 후 훈련데이터셋과 검증데이터셋으로 분리하세요.

  • 대상 데이터프레임: df_preset
  • 훈련 데이터셋 label: y_train, 훈련 데이터셋 Feature: X_train
  • 검증 데이터셋 label: y_valid, 검증 데이터셋 Feature: X_valid
  • 훈련 데이터셋과 검증데이터셋 비율은 80:20
  • random_state: 42
  • Scikit-learn의 train_test_split 함수를 활용하세요.
# 여기에 답안코드를 작성하세요.
from sklearn.model_selection import train_test_split
x = df_preset.drop(columns = ['Time_Driving'])
y = df_preset['Time_Driving']
X_train, X_valid, y_train, y_valid = train_test_split(x, y, test_size = 0.2, random_state = 42)

11. Time_Driving(실주행시간)을 예측하는 머신러닝 모델을 만들려고 합니다.

의사결정나무(decision tree)는 여러 가지 규칙을 순차적으로 적용하면서 독립 변수 공간을 분할하는 모형으로

분류(classification)와 회귀 분석(regression)에 모두 사용될 수 있습니다.

의사결정나무(decision tree)로 학습을 진행하세요.

  • 트리의 최대 깊이: 5로 설정
  • 노드를 분할하기 위한 최소한의 샘플 데이터수(min_samples_split): 3로 설정
  • random_state: 120로 설정
# 여기에 답안코드를 작성하세요.
from sklearn.tree import DecisionTreeRegressor
tree = DecisionTreeRegressor(max_depth = 5, min_samples_split = 3, random_state=120)
tree.fit(X_train, y_train)

12. 위 의사결정나무(decision tree) 모델의 성능을 평가하려고 합니다.

예측 결과의 mae(Mean Absolute Error)를 구하세요.

  • 성능 평가는 검증 데이터셋을 활용하세요.
  • 11번 문제에서 만든 의사결정나무(decision tree) 모델로 y값을 예측(predict)하여 y_pred에 저장하세요.
  • 검증 정답(y_valid)과 예측값(y_pred)의 mae(Mean Absolute Error)를 구하고 dt_mae 변수에 저장하세요.
# 여기에 답안코드를 작성하세요.
from sklearn.metrics import  mean_absolute_error
y_pred = tree.predict(X_valid)
dt_mae = mean_absolute_error(y_valid, y_pred)
print(dt_mae)

13. Time_Driving(실주행시간)을 예측하는 딥러닝 모델을 만들려고 합니다.

아래 가이드에 따라 모델링하고 학습을 진행하세요.

  • Tensoflow framework를 사용하여 딥러닝 모델을 만드세요.
  • 히든레이어(hidden layer) 2개이상으로 모델을 구성하세요.
  • dropout 비율 0.2로 Dropout 레이어 1개를 추가해 주세요.
  • 손실함수는 MSE(Mean Squared Error)를 사용하세요.
  • 하이퍼파라미터 epochs: 30, batch_size: 16으로 설정해주세요.
  • 각 에포크마다 loss와 metrics 평가하기 위한 데이터로 X_valid, y_valid 사용하세요.
  • 학습정보는 history 변수에 저장해주세요
# 여기에 답안코드를 작성하세요.
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(87,))) #input_shape = (X_train.shape[1], 
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1))

model.compile(loss='mse', optimizer='adam', metrics=['mae', 'mse'])

es = EarlyStopping(monitor='val_loss', patience=5) 

checkpoint_path = 'best_model.keras'  # 파일 경 로를 수정
mc = ModelCheckpoint(checkpoint_path, monitor='val_loss', verbose=1, save_best_only=True)

history = model.fit(X_train, y_train, epochs=30, batch_size=16,
                   validation_data=(X_valid, y_valid),
                   callbacks=[es, mc]
                   )

14. 위 딥러닝 모델의 성능을 평가하려고 합니다.

Matplotlib 라이브러리 활용해서 학습 mse와 검증 mse를 그래프로 표시하세요.

  • 1개의 그래프에 학습 mae과 검증 mse 2가지를 모두 표시하세요.
  • 위 2가지 각각의 범례를 'mae', 'mse'로 표시하세요.
  • 그래프의 타이틀은 'Model MSE'로 표시하세요.
  • X축에는 'Epochs'라고 표시하고 Y축에는 'MSE'라고 표시하세요.
# 여기에 답안코드를 작성하세요.
plt.plot(history.history["mae"], label="mae")
plt.plot(history.history["mse"], label="mse")
plt.title("Model MSE")
plt.xlabel("Epochs")
plt.ylabel("MSE")
plt.legend()
plt.show()
profile
성실함 한스쿱

0개의 댓글