인프런 커뮤니티 질문&답변

밥풀님의 프로필 이미지
밥풀

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

2회 기출유형(작업형2)

[기출2회 작업형2] 분류문제 (주어진 데이터 3개)

해결된 질문

작성

·

42

0

기출 2회 작업형2 문제가 로지스틱 회귀로 분류문제라 랜포를 이용해서 풀이를 하려고 하는데요.

 

주어진 데이터가 3개라서 concat을 이용해서 X_train과 y_train을 train으로 합쳐서 하려고 하는데 잘 안됩니다ㅜ

train = pd.concat([X_train, y_train['Reached.on.Time_Y.N']], axis=1)
train.head(1)

이 코드에서 'Reached.on.Time_Y.N' 이 컬럼만 없고 나머지는 있어서 얘만 합쳐주는 건가요?

 

# 데이터 불러오기
import pandas as pd
test = pd.read_csv("X_test.csv")
X_train = pd.read_csv("X_train.csv")
y_train = pd.read_csv("y_train.csv")

#주어진 데이터 3개라서 2개로 만들기(train합치기)
train = pd.concat([X_train, y_train['Reached.on.Time_Y.N']], axis=1)
train.head(1)


# 3. 탐색적 데이터 분석(EDA)
print(train.shape) #1490
print(test.shape) #497

print(train.info())
print(test.info())

print(train.head(3))
print(test.head(3))

print(train.isnull().sum())
print(test.isnull().sum())

print(train['Reached.on.Time_Y.N'].value_counts())

# 4. 데이터 전처리
print(train.info())
# 오브젝트형 있네?->인코딩하자

# print(train.shape, test.shape)
train=pd.get_dummies(train)
test=pd.get_dummies(test)
# print(train.shape, test.shape)

# print(train.info())

train = train.drop('ID', axis=1)
test_id = test.pop('ID')
test.head()
# 5. 검증용 데이터 분할  *XXYY로*
from sklearn.model_selection import train_test_split
target = train.pop('Reached.on.Time_Y.N')
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=7)

print(X_tr.shape,  y_tr.shape, X_val.shape, y_val.shape)

# 6. 검증 데이터 머신러닝 학습 및 평가 - 호출, 학습, 예측
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=7)
rf.fit(X_tr,y_tr)
pred = rf.predict_proba(X_val)

from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(y_val, pred[:,1])
print('roc_auc:',roc_auc)

# 7. 예측 및 결과 파일 생성
pred=rf.predict_proba(test)
print(pred[:10])
submit = pd.DataFrame({
    'ID': test_id, 'Reached.on.Time_Y.N': pred[:,1]
})
submit.to_csv('result.csv',index=False)

# 제출파일 확인
pd.read_csv('result.csv')
pd.read_csv('result.csv').shape

꿀팁 영상 보고 주어진 데이터가 3개일 경우를 정리해본건데 코드가 많이 길지만 결과 나올 수 있게 코드 손 봐주시면 감사하겠습니다TT

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

잘 돌아가는 정상 코드로 보입니다만 어떤 부분이 문제일까요?

0

안녕하세요, 인프런 AI 인턴입니다. 밥풀님께서 기출 2회 작업형 2 문제에 대해 주신 질문에 대해 안내드리겠습니다.

3개의 데이터를 2개로 합치는 과정은 종종 발생합니다. X_trainy_trainconcat을 통해 합쳐 하나의 train 데이터프레임으로 만드는 것이 일반적인 방법입니다. 이때, y_train의 특정 컬럼 'Reached.on.Time_Y.N'만을 사용하여 합치는 것은 타겟 라벨로 사용하기 위함입니다.

작성하신 코드는 대체로 잘 구성되어 있습니다만, 몇 가지 체크해야 할 부분이 있습니다. 아래에 주요 단계별로 설명을 드리겠습니다.

코드 주요 단계

  1. 데이터 합치기:

    • train = pd.concat([X_train, y_train['Reached.on.Time_Y.N']], axis=1) 이 부분에서 X_trainy_train의 타겟 컬럼을 합쳐 새로운 train 데이터프레임을 만드셨습니다. 이로써, train에는 입력 변수들과 타겟 변수가 같이 포함되어 있습니다.
  2. 탐색적 데이터 분석(EDA):

    • traintest 데이터에 대해 기본적인 정보 탐색을 진행하고 결측치를 확인하였습니다.
  3. 데이터 전처리:

    • 범주형 변수를 처리하기 위해 pd.get_dummies()를 사용하여 원핫 인코딩을 수행하셨습니다. 이 과정은 데이터의 모든 범주형 변수를 0과 1로 이루어진 이진 데이터로 변환하여 모델 학습에 적합하게 만듭니다.
    • 데이터에서 ID 컬럼을 제거하여 추후 모델 학습에서 제외합니다.
  4. 모델 학습 준비 및 검증 데이터 분할:

    • train_test_split 함수를 통해 학습 데이터와 검증 데이터를 분리하셨습니다. 이 단계에서 타겟 변수 'Reached.on.Time_Y.N'train으로부터 분리하여 별도의 target 변수로 관리하였습니다.
  5. 모델 학습 및 평가:

    • RandomForestClassifier를 사용하셨으며, 검증 데이터에서 ROC AUC 점수를 계산하여 모델 성능을 평가하였습니다.
  6. 예측 및 결과 제출:

    • 테스트 데이터에 대한 예측을 수행하고 이를 CSV 파일로 저장하여 결과를 제출하였습니다.

문제 해결 팁

  • 컬럼 불일치 문제: X_trainy_train가 정확히 동일한 샘플 순서인지, 또는 두 데이터 간의 행이 일치하는지 점검하세요.
  • 범주형 데이터 인코딩: pd.get_dummies()를 할 경우 traintest 모두 같은 범주를 갖도록 조정하세요.

해당 과정에 대한 추가적인 참고 자료와 유사한 문제 해결 방법을 제공한 기존 게시글이 있습니다. 아래의 링크를 통해 확인해 보세요:

이 자료는 데이터 합치기와 전처리 과정에서 유용한 팁을 제공하여, 문제 해결 시 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

밥풀님의 프로필 이미지
밥풀

작성한 질문수

질문하기