인프런 커뮤니티 질문&답변
답변 항상 감사드립니다. 질문 있습니다.
해결된 질문
작성
·
34
·
수정됨
0
5회 작업형 2문제 입니다. 질문이 좀 됩니다.
import pandas as pd
import numpy as np
X_test = pd.read_csv("X_test.csv")
X_train = pd.read_csv("X_train.csv")
y_train = pd.read_csv("y_train.csv")
#-------------전처리--------------
xtrain = X_train.drop(columns = 'device_id')
xtest = X_test.drop(columns = 'device_id')
cond = y_train['repair_cost'] <= 0
ytrain = y_train[~cond]
#-------------스케일링--------------
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
xtrain1 = scaler.fit_transform(xtrain)
xtest1 = scaler.fit_transform(xtest)
#-------------모델링--------------
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(xtrain1, y_train)
pred = model.predict(xtest1)
#-------------검증--------------
yhat = model.predict(xtrain1)
a = np.corrcoef(yhat, y_train.values.flatten())
print(a)[질문]
모델링 관련 질문입니다.
저는 전처리 단계에서ytrain 'repair cost'가
음수이거나 0인 값은 빼는 것이 맞다고 판단하여 drop하였습니다.
repair cost가 공짜일 순 있으나 음수인것은 말이 안되니까요.학부생일때도 결측값이나 해석하기 애매한 값에 대해서는
mean이나 mode로 채우지 않고
다 drop 했었는데, 빅분기 2유형에서도 이런 전략이 유효한가 여쭙는 질문입니다.(xtest 테이블에 있는 행들은 하나라도 drop하면 안되는 것으로 알고 있긴합니다.)
(예를 들어, 주어진 xtrain '나라' 열에 '미국, 영국, 프랑스' 라는 3가지 값이 있고
xtest '나라'열에 '독일, 러시아, 영국'라는 3가지 값이 있으면,
원핫인코딩으로 전처리하고 모델돌릴시 에러가 뜨지않습니까?
이런 에러 방지를 위해서라도 drop이 편한다고 생각합니다.)모델링 관련 질문입니다.
2유형은 분류, 회귀 중 한 문제가 통으로 나온다고 알고 있습니다.
찾아보니 LightGBM등 머신러닝 기법 종류는 다양한데,
랜덤포레스트 Classifier와 Regressor로 2유형은 정리 가능한지 문의드립니다.
당연히 장담은 못 주시겠지만,
코딩 대한민국님 기출 강의 먼저 듣고
시중에 나와있는 연습문제 풀다보니
막히는 곳이 많아서 걱정입니다.
(주로 전처리에서 막힙니다. 시중 연습문제들은 기출문제들 같이 데이터 전처리가 간단하지 않네요.)코딩 관련 질문입니다.
특히 스케일링시,
저는
scaler = MinMaxScaler() xtrain1 = scaler.fit_transform(xtrain) xtest1 = scaler.fit_transform(xtest)
이렇게 했는데,
코딩대한민국님 강의에서는
scaler = MinMaxScaler()
scaler.fit(xtrain)
xtrain1 = scaler.transform(xtrain)
xtest1 = scaler.transform(xtest)
이런식으로 하시더라구요.
비교해보니 출력값은 같아 보이는데, 차이점이 무엇인지 여쭙습니다.
fit은 xtrain만 했는데
transform은 xtrain뿐만 아니라, xtest도 알아서 되는 메커니즘이 이해가 안가네요.
transform은 fit이 사전에 수행 안되도 되는 것일까요?
답변 2
0
좋은 질문입니다! 빅데이터분석기사 실기 유형2(작업형2)의 특성을 고려하여 답변드리겠습니다.
데이터 Drop 전략의 유효성에 대한 현재 코드의 문제점은
cond = y_train['repair_cost'] <= 0
ytrain = y_train[~cond] # ytrain만 필터링
이렇게 하면 xtrain과 ytrain의 행 개수가 안 맞아서 에러가 발생합니다!
올바른 수정은 다음과 같습니다.
cond = y_train['repair_cost'] <= 0
xtrain = xtrain[~cond] # X도 같이 필터링
ytrain = y_train[~cond]
말씀하신건 처럼 명백한 이상치(음수 수리비)는 제거하는 것이 합리적 입니다.
그리고 train 데이터는 drop 가능한데 test는 절대 drop 하지 마세요.
아래의 코드는 절대 하면 안됩니다.
xtest = xtest.dropna() # 제출파일 행수 안맞습니다.
결측치 처리 방법은 시험 시간 관계상 다음과 같이 해주세요.
xtest = xtest.fillna(xtest.mean()) # 수치형
xtest['category'] = xtest['category'].fillna('Unknown') # 범주형
그리고 두번째 질문이신 원핫인코딩 불일치 문제는 매우 중요한 질문 입니다.
문제 상황:
# Train: 미국, 영국, 프랑스
# Test: 독일, 러시아, 영국
pd.get_dummies(xtrain) # 3개 컬럼
pd.get_dummies(xtest) # 3개 컬럼 (다른 이름!) → 에러!
해결방법은 다음과 같이 하시면 됩니다.
방법: pd.get_dummies() + reindex
xtrain_encoded = pd.get_dummies(xtrain, columns=['country'])
xtest_encoded = pd.get_dummies(xtest, columns=['country'])
# test를 train 컬럼에 맞춤 (없는 컬럼은 0으로 채움)
xtest_encoded = xtest_encoded.reindex(columns=xtrain_encoded.columns, fill_value=0)
시험 시간이 제한되어 있어서 경진대회 할때 처럼 모델을 다양하게 쓰고 하이퍼 파라미터를 조절하며 시험 문제를 풀수가 없습니다.
그래서 최대한 간단하게 코드를 암기하고 작성하시면 40점 만점에 35점 이상은 맞출수 있으니까요.
일단 시험은 최대한 간단하게 코드를 암시하시는걸 추천드려요.
그리고 랜덤 포레스트 분류와 회귀 질문은 아주 잘해주셧는데요.
시험때는 그냥 분류 문제가 나오면 랜덤 포레스트 분류(RandomForestClassifier) 를 풀고
수치 예측 문제가 나오면 랜덤 포레스트 회귀(RandomForestRegressor) 로 풀면 됩니다.
관련된 예제는 제가 최근 10회 시험문제 복기로 올린 2유형 문제를 참고하시면 회귀문제를 보실 수 있습니다.
분류는 2회~9회 시험을 대부분으로 랜덤 포레스트 분류로 제 2유형을 풀어서 그걸 보시면 되구요.
일단 짧고 간단하게 2유형 코드를 작성하시고 계속 매일매일 시험환경에서 반복 연습하다보면 꼭 합격하십니다.
화이팅 ! 하세요.
0
안녕하세요, 인프런 AI 인턴입니다. 이진형님께서 질문주신 내용에 대한 답변을 드리겠습니다.
질문 1: 데이터 전처리에서 음수 값 삭제
모델링에서 음수이거나 의미 없는 값(예: 0)을 삭제하는 것은 올바른 데이터 전처리 방법이 될 수 있습니다. 특히 repair_cost가 논리적으로 음수일 수 없는 값이라면, 해당 행을 제거하여 데이터의 품질을 유지하는 것이 좋습니다. 그러나, 모델의 학습에 중요한 패턴이나 정보가 삭제되지 않도록 사전에 데이터를 충분히 분석해야 합니다.
- 대안으로는 이상치(outlier) 감지 및 조정을 거쳐서 다루는 방법도 있습니다. 예를 들어 이상치를 다른 합리적인 값으로 대체하거나, 검증된 데이터만 이용하는 방향으로 조정할 수도 있습니다.
- 질문에서 말씀하신 “나라” 열의 문제가 발생할 수 있는데, 이는 주로 학습과 예측 데이터에 존재하지 않는 범주형 값을 다루는 과정에서 발생합니다. One-hot 인코딩 시에 훈련 데이터와 예측 데이터를 동일하게 처리하여 이러한 문제를 방지할 수 있습니다.
질문 2: 랜덤포레스트를 사용한 유형 2 문제 해결
랜덤 포레스트(Random Forest)는 분류와 회귀 모두에 사용할 수 있는 강력한 알고리즘입니다. 유형 2 문제에서 주로 발생하는 문제는 크게 두 가지로, 분류 문제와 회귀 문제가 있습니다. 다음과 같이 각각 모형을 구현하면 됩니다:
- 분류 문제에서는
RandomForestClassifier를 사용합니다.
- 회귀 문제에서는
RandomForestRegressor를 사용합니다.
랜덤 포레스트 외에도 LightGBM 등 다양한 모델을 사용하는 것도 유리합니다. 이러한 알고리즘은 다루는 데이터의 특성과 모델의 복잡성에 따라 다른 성능을 보여줄 수 있습니다.
참고자료
기존에 유사한 질문과 대답이 게시된 자료를 추가로 추천드립니다:
- “빅데이터 분석 기사의 전처리 단계 방법론과 사례”
- “분류와 회귀 문제에서 랜덤 포레스트 사용하기”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





