코딩팡 2호선 전처리 종합 28번 중고 카메라 매입가 문제 최적화 질문드립니다.
안녕하세요.
코딩팡 2호선 노선도 문제에서 28번 중고 카메라 매입가 문제를 풀었는데, 어떻게 해도 RMSE 값이 낮아지지 않아서 질문드립니다. 현재 아래와 같은 코드로 했을 때 가장 정확도가 높았고, 'shutter_count'를 중앙값이나 평균 등으로 채울 경우 정확도가 더 떨어졌었습니다.
해당 코드에서 어떤 부분을 수정해야 정확도가 높아질 수 있는지 모르겠어서 질문드립니다.
감사합니다.
import pandas as pd
pd.set_option('display.max_column', None)
train = pd.read_csv("data/camera_train.csv")
test = pd.read_csv("data/camera_test.csv")
# EDA
# print(train.shape, test.shape) # (2500, 11) (800, 10)
# print(train.info(), test.info()) # non-null, 대부분 obj, item_id drop, shutter_count '?' 유의
# print(train.describe(include='object'), test.describe(include='object')) # different
# print(train.isnull().sum())
# Pre - price
y_train = train.pop('price')
train = train.drop(['item_id'], axis=1)
test = test.drop(['item_id'], axis=1)
# encoding
import numpy as np
train['unknown'] = np.where(train['shutter_count']=='?', 1, 0)
test['unknown'] = np.where(test['shutter_count']=='?', 1, 0)
train['shutter_count'] = train['shutter_count'].replace({'?':'-1'}).astype(int)
test['shutter_count'] = test['shutter_count'].replace({'?':'-1'}).astype(int)
train['megapixel'] = train['megapixel'].str.replace('MP', '', regex=False).astype(float)
test['megapixel'] = test['megapixel'].str.replace('MP', '', regex=False).astype(float)
from sklearn.preprocessing import LabelEncoder,RobustScaler
le = LabelEncoder()
cols = train.select_dtypes(include='object').columns
tmp = pd.concat([train, test], axis=0)
for col in cols:
tmp[col] = le.fit_transform(tmp[col])
train = tmp.iloc[:len(train)].copy()
test = tmp.iloc[len(train):].copy()
sc = RobustScaler()
train['shutter_count'] = sc.fit_transform(train[['shutter_count']])
test['shutter_count'] = sc.transform(test[['shutter_count']])
# print(train.head(10))
# Valid
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, y_train, test_size=0.2, random_state=0)
# Modeling - RMSE
from sklearn.metrics import mean_squared_error
def val(name, pred):
print(f"[{name}] RMSE = {(mean_squared_error(y_val, pred)) ** 0.5}")
# RF
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0, n_estimators=600)
rf.fit(X_tr, y_tr)
pred_rf = rf.predict(X_val)
val('RF n_estimators=600', pred_rf)
# XGB
from xgboost import XGBRegressor
xgb = XGBRegressor(random_state=0, max_depth=5)
xgb.fit(X_tr, y_tr)
pred_xgb = xgb.predict(X_val)
val('XGB max_depth=5', pred_xgb)
# LGBM
from lightgbm import LGBMRegressor
lgb = LGBMRegressor(random_state=0, n_estimators=400, learning_rate=0.03, verbose=-1, max_depth=7)
lgb.fit(X_tr, y_tr)
pred_lgb = lgb.predict(X_val)
val('LGB max_depth=7 n_estimators=400', pred_lgb)
# [RF def] RMSE = 129.19054561590218
# [XGB def] RMSE = 85.62395927743444
# [LGB def] RMSE = 104.9641856432373
# [RF n_estimators=600] RMSE = 125.20707171872648
# [XGB max_depth=5] RMSE = 79.00022250759804
# [LGB max_depth=7 n_estimators=400] RMSE = 102.49297269651322
# Submit
xgb.fit(train, y_train)
pred = xgb.predict(test)
pd.DataFrame({'pred':pred}).to_csv('result.csv', index=False)
res = pd.read_csv('result.csv')
print(res.shape, res.head())
回答 1
0
안녕하세요. 이 문제는 데이터 자체가 어려운 편이라 모델만 조금 바꿔서는 크게 줄지 않습니다. 시험에서는 여기까지 요구하지 않으니 지금 코드로도 충분하다고 봅니다.
첫째, 데이터 문제입니다.
test에만 있는 브랜드가 두 개 있어서 train에서 배우지 못한 값이 섞여 있습니다. 셔터 횟수의 '?'도 train과 test 모두에 있는데, 이 결측 자체가 가격과 관련된 정보일 수 있습니다. 그래서 중앙값으로 채우면 이 정보가 빠져서 정확도가 떨어지는 것으로 보입니다.
결측값은 항상 어떤 것이 좋을 수 없어, 이것 저것 대입 후 비교가 필요해요
둘째, 그래도 더 낮추고 싶다면 가격을 로그로 변환해서 학습해 보세요. 가격처럼 한쪽으로 치우친 데이터에서는 도움이 되는 경우가 많습니다. 다만 항상 좋아지는 건 아니라서 모델별로 검증 점수를 비교한 뒤에 쓰는 것이 좋습니다. 사이트에서 확인해 보니 부스팅 모델은 좋아졌고 랜덤포레스트는 나빠졌습니다.
셋째, 전체데이터를 학습하는 방법
작성한대로 전체 데이터를 학습하는 방법이 있습니다.
8회 작업형2
0
7
2
작업형2 모의문제2 updated 2026.10
0
15
3
단순선형 회귀분석 신뢰구간,예측구간 관련질문
0
21
2
판다스 부분 강의 듣고 있는데..
0
27
2
코딩팡 Pro 등록방법 문의
0
24
1
'자동으로 저장할 수 없습니다. 이 파일은 원격으로 또는 다른 탭에서 업데이트되었습니다.'
0
19
2
random_state에 따른 최종스코어 점수차이
0
28
2
코랩 백엔드
0
49
3
xgboost 사용 시 오류 이유
0
41
2
작업형 2 제출하는 법
0
52
2
Section 5. 문자열 슬라이싱, 파생변수, 평균값 질문 드립니다.
0
36
1
예시문제 작업형2(ver. 2025)
0
43
2
수강 연장 문의드립니다.
0
40
2
예시문제 작업형2(ver. 2025)
0
48
2
작업형2 모의문제 3 질문
0
57
1
수강연장 관련 문의
0
60
2
안녕하세요 강사님 문의사항이 있습니다
0
45
1
수강 연장 문의
0
91
4
수강기간 연장 관련 문의
0
61
2
작업형2모의문제3_updated2026.10
0
77
2
안녕하세요. 수강연장 신청드립니다
0
58
2
코랩 링크
0
49
2
작업형2 모의문제2 updated 2026.10 질문
0
64
2
카이제곱 독립성검정 질문합니다.
0
54
2

