본문 바로가기
자격증/AICE ASSO

정리2

by 쿙이콩 2025. 8. 12.
728x90

1. 라이브러리 임포트

pandas, numpy, seaborn, matplotlib을 임포트

순서대로 별칭(alias)은 pd, np, sns, plt로 지정

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

2. 데이터 불러오기

delivery_time.csv 파일을 불러와야 합니다.
- 파일을 읽어 delivery_df라는 이름의 데이터프레임에 저장하세요.
- 파일명: delivery_time.csv

delivery_df = pd.read_csv('delivery_time.csv')

pd.read_csv


3. 데이터 확인

날씨상태(weather), 배달원 숙련도(rider_experience)에 따른 배달시간(deliverty_time_min)의 차이를 확인하고자 합니다.
- seaborn의 barplot()을 이용하여 시각화하고, 결과를 바탕으로 올바른 해석을 '답03'변수에 저장하세요.  
- x = weather
- y = delivery_time_min
- hue = rider_experience

1. snow 조건에서는 숙련도 간 차이가 가장 뚜렷하며, low 숙련도 라이더의 배송 시간이 다른 조건에 비해 가장 길다.  
2. rain 조건에서는 숙련도 간 차이가 가장 크고, high 숙련도 라이더가 유일하게 다른 날씨보다 느리게 배달했다.  
3. fog 조건에서는 숙련도가 높을수록 평균 배송 시간이 낮아지는 일관된 경향이 관찰된다.  
4. clear 조건에서는 숙련도 간의 차이가 가장 적고, 모든 그룹이 비슷한 평균 배송 시간을 기록했다.

sns.barplot(data=delivery_df, x="weather", y="delivery_time_min", hue = 'rider_experience')
답03 = 1

sns.barplot (data = , x = ' ' , y = ' ' , hue = ' ' )


4. 데이터 시각화에 따른 이상치 제거

seaborn의 jointplot을 이용하여 배달시간(delivery_time_min)과 배달 거리(distance_km)간을 분석하고 이상치를 제거
- x = distance_km
- y = delivery_time_min
- 시각화를 통해 데이터를 확인한 후, delivery_time이 100 이상인 이상치를 제거하고 del_df에 저장하세요.

sns.jointplot(data=delivery_df, x="distance_km", y="delivery_time_min")

del_df = delivery_df.drop(delivery_df[delivery_df.delivery_time_min >= 100].index, axis=0)
del_df

sns.jointplot(data=delivery_df, x="distance_km", y="delivery_time_min")

del_df = delivery_df.drop(delivery_df[delivery_df.delivery_time_min >= 100].index, axis=0)
del_df

 

.drop( df [ df . 컬럼 ].index, axis = 0 )


 

5. 이상치 제거 및 인덱스 초기화

'delivery_time_min'의 데이터에는 음수 값이 존재하고 있습니다. 이 음수 값들에 해당하는 데이터들을 삭제하고, index를 초기화 하세요.
- axis=0, inplace=True
- reset_index()에서는 drop=True, inplace=True를 사용하세요.

del_df.drop(del_df[del_df['delivery_time_min'] < 0].index, axis=0, inplace=True)
del_df.reset_index(drop=True, inplace=True)
del_df

del_df.drop(del_df[del_df['delivery_time_min'] < 0].index, axis=0, inplace=True)
del_df.reset_index(drop=True, inplace=True)
del_df.drop(del_df[delivery_df.delivery_time_min < 0].index, axis=0, inplace=True)
del_df.reset_index(drop=True, inplace=True)

 

 

.drop ( df [ df ['col'] < 0 ] .index , axis = 0 , inplace = True )

.index 괄호없음


6. 필요없는 컬럼 제거

'order_amount', 'num_items' 컬럼을 삭제합니다.
- axis=1, inplace=True

del_df.drop(columns=['order_amount', 'num_items'], axis=1, inplace=True)
del_df

df. drop (columns = [ ' 여러개 ' ], axis = 1 , inplace = True)


7. 범주형 변수 인코딩

rider_experience, weather, order_time 컬럼을 get_dummies로 변환하세요.
- drop_first=True 옵션 사용
- 처리된 데이터는 encoding_df 변수에 저장하세요.

cat_col = ['rider_experience', 'weather', 'order_time']
encoding_df = pd.get_dummies(data=del_df, columns=cat_col, drop_first=True)
encoding_df

pd.get_dummies (data = , columns = , drop_first = True)


8. 이진 범주형 변수 인코딩

이진값으로 이루어진 'promotion_applied'변수를 label encoding 하세요.
- labelencoder 적용
- fit_transform을 사용하세요

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

encoding_df['promotion_applied'] = le.fit_transform(encoding_df['promotion_applied'])
encoding_df

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

encoding_df['promotion_applied'] = le.fit_transform(encoding_df['promotion_applied'])
encoding_df

 

728x90

 

 


9. 학습 (train) / 평가 (test) 분리

모델 학습을 위해 feature(X)와 target(y)을 분리하고 평가를 위해 데이터를 8:2로 나눕니다.
- 데이터 분리하기 위해 train_test_split을 불러오세요.
- X = delivery_time_min을 제외한 전부
- y = delivery_time_min  
- 훈련 데이터 셋 = X_train, y_train
- 검증 데이터 셋 = X_valid, y_valid
- 훈련데이터 셋과 검증 데이터셋의 비율은 8:2
- random_state=42

X = encoding_df.drop(columns='delivery_time_min')
y = encoding_df['delivery_time_min']


from sklearn.model_selection import train_test_split
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)

X_train, X_valid, y_train, y_valid = train_test_split (X, y, test_size = , random_state = )


10.  표준화

StandardScaler를 이용하여 X_train과 X_valid를 표준화합니다.
- StandardScaler 적용
- X_train은 fit_tranform을 이용하여 X_train 변수에 저장
- X_valid는 transform을 이용하여 X_test의 변수에 저장

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()

X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_valid)

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_valid)


11.  선형 회귀 모델 학습

LinearRegression 모델을 학습하여 배송 시간을 예측합니다.

- LinearRegression 불러오기 및 모델 학습
- 불러온 LinearRegression모델은 lr 변수로 저장하세요.
- 훈련은 스케일링 처리된 데이터를 사용해 주세요.

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(X_train,y_train)

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(X_train,y_train)

 


12.  랜덤포레스트 회귀 모델 학습

RandomForestRegressor를 학습하여 배송 시간을 예측합니다.

- 랜덤포레스트모델을 rfr변수에 저장하세요.
- n_estimators=100, max_depth=10, random_state=42
- 훈련은 스케일링 처리된 데이터를 사용해 주세요.

from sklearn.ensemble import RandomForestRegressor

rfr = RandomForestRegressor(n_estimators=100, max_depth=10, random_state=42)
rfr.fit(X_train, y_train)

from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(n_estimators=100, max_depth=10, random_state=42)
rfr.fit(X_train, y_train)

 


13.  딥러닝 모델 설계 및 학습

딥러닝 모델을 사용해 배송 시간을 예측하려 합니다.
- Sequential 모델을 설계하고 학습하세요.
- 구조:
  - Dense(64, relu) → BatchNormalization
  - Dense(32, relu) → BatchNormalization
  - Dense(16, relu)
  - Dense(1, linear)
- optimizer: adam
- loss: mean_squared_error
- metric: mean_absolute_error
- epochs=50
- batch_size=128

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, BatchNormalization

tf.random.set_seed(42)

model = Sequential()

model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(BatchNormalization())
model.add(Dense(32, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='linear')) 

model.compile(optimizer='adam',
              loss='mean_squared_error', 
              metrics=['mean_absolute_error'])

model.fit(X_train, y_train, epochs=50, batch_size=128,
          validation_data=(X_valid, y_valid))

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, BatchNormalization

tf.random.set_seed(42)

model = Sequential()

model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(BatchNormalization())
model.add(Dense(32, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='linear')) 

model.compile(optimizer='adam',
              loss='mean_squared_error', 
              metrics=['mean_absolute_error'])

model.fit(X_train, y_train, epochs=50, batch_size=128,
          validation_data=(X_valid, y_valid))

 


14. 모델 early stopping, 체크포인트 저장

모델 학습 중 과적합을 방지하고, 최적 가중치를 저장하려 합니다.
- EarlyStopping과 ModelCheckpoint를 설정하여 학습하세요.

- EarlyStopping: monitor='val_loss', patience=5
- ModelCheckpoint: monitor='val_loss', save_best_only=True, 파일명 'best_model.h5'

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

early_stopping = EarlyStopping(
    monitor='val_loss',    
    patience=5,            
    restore_best_weights=True
)

model_checkpoint = ModelCheckpoint(
    filepath='best_model.h5',     
    monitor='val_loss',           
    save_best_only=True,          
    verbose=1
)

model.fit(
    X_train, y_train,
    epochs=50,
    batch_size=128,
    validation_data=(X_valid, y_valid),
    callbacks=[early_stopping, model_checkpoint]
)

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

early_stopping = EarlyStopping(
    monitor='val_loss',    
    patience=5,            
    restore_best_weights=True
)

model_checkpoint = ModelCheckpoint(
    filepath='best_model.h5',     
    monitor='val_loss',           
    save_best_only=True,          
    verbose=1
)

model.fit(
    X_train, y_train,
    epochs=50,
    batch_size=128,
    validation_data=(X_valid, y_valid),
    callbacks=[early_stopping, model_checkpoint]
)

- - -

tensorflow.keras.callbacks 모듈에서 학습 중간에 실행되는 특수 이벤트(콜백=훈련 중간 제어) 기능을 가져옴.

EarlyStopping : 과적합 방지, 학습 조기 종료
ModelCheckpoint : 학습 중 가장 좋은 모델 저장

 

“val_loss 지켜보다가(검증 손실(validation loss)을 기준으로 성능 추적)

→ 5번 참았다가(성능 개선이 없더라도 5번(5 에포크) 더 기다렸다가 훈련 종료)

→ 최고의 가중치로 돌아감”
patience는 "참을성", restore는 "되돌리기"

 

filepath='best_model.h5' → 모델 저장 경로
monitor='val_loss' → 검증 손실 기준으로 저장
save_best_only=True → 성능 향상 시에만 저장
verbose=1 → 저장 시 콘솔에 메시지 출력

>>> "Best만 Save" : 훈련 도중 최고 성능 모델을 실시간 저장해서 훈련 종료 후 바로 활용 가능
>>> 모델이 나빠진 시점의 파라미터를 방지

 

epochs=50 → 최대 50회 반복 학습. EarlyStopping이 있으면 중간에 멈출 수 있음
batch_size=128 → 미니배치 크기
validation_data=(X_valid, y_valid) → 검증 데이터 지정
callbacks=[early_stopping, model_checkpoint] → 학습 중 매 에포크마다 두 콜백 실행

>>> **fit()**에서 콜백을 넘겨 적용

fit() → 기본 훈련 함수
callbacks는 “옵저버” 역할을 하여 학습 진행 상태를 체크
EarlyStopping + ModelCheckpoint = 필승 콤보
EarlyStopping: 시간 절약 + 과적합 방지
ModelCheckpoint: 최고 모델 보관

 


출처: 내돈내산 문제집

내돈내산으로 책 구매 O / 링크는 광고(쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.)

 

[이패스코리아] 2025 이패스 AI능력시험 AICE Associate /사은품 마스크제공 - 컴퓨터 입문/활용 | 쿠팡

쿠팡에서 [이패스코리아] 2025 이패스 AI능력시험 AICE Associate /사은품 마스크제공 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 컴퓨터 입문/활용 제품도 바로 쿠팡에서 확인할 수 있습

www.coupang.com

 

728x90

'자격증 > AICE ASSO' 카테고리의 다른 글

정리5  (6) 2025.08.14
정리4  (10) 2025.08.14
정리3  (4) 2025.08.13
정리1  (1) 2025.08.12
[AICE] 자격증 소개 / 비전공자 교재 추천 / 독학 방법 (내돈내산)  (12) 2025.08.11