강의

멘토링

로드맵

Inflearn brand logo image

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

eovnfjfpa님의 프로필 이미지
eovnfjfpa

작성한 질문수

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

예시문제 작업형2(ver. 2025) 🆕

궁금한 점 있습니다!

해결된 질문

작성

·

33

0

# 출력을 원하실 경우 print() 함수 활용

# 예시) print(df.head())

# getcwd(), chdir() 등 작업 폴더 설정 불필요

# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가

import pandas as pd

train = pd.read_csv("data/customer_train.csv")

test = pd.read_csv("data/customer_test.csv")

pd.set_option("display.max_columns", None)

train['환불금액'] = train['환불금액'].fillna(0)

test['환불금액'] = test['환불금액'].fillna(0)

train = train.drop("회원ID", axis = 1)

test = test.drop("회원ID", axis = 1)

target = train.pop("총구매액")

#print(train.describe(include = 'O'))

#print(test.describe(include = 'O'))

total = pd.concat([train,test])

nums = total.select_dtypes(exclude = 'object').columns

cols = total.select_dtypes(include = 'object').columns

from sklearn.preprocessing import MinMaxScaler

mx = MinMaxScaler()

total[nums] = mx.fit_transform(total[nums])

from sklearn.preprocessing import LabelEncoder

for col in cols:

le = LabelEncoder()

total[col] = le.fit_transform(total[col])

train = total.iloc[:3500]

test = total.iloc[3500:]

from sklearn.model_selection import train_test_split

x_tr, x_val, y_tr, y_val = train_test_split(train,target,test_size = 0.2, random_state = 2022)

from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(random_state = 2022, max_depth = 10,n_estimators = 800)

model.fit(x_tr,y_tr)

pred = model.predict(x_val)

#81957423.82110961

pred = model.predict(test)

re = pd.DataFrame({"pred":pred})

re.to_csv("result.csv",index=False)

v = pd.read_csv("result.csv")

print(v.shape)

강사님 안녕하세요 짧은 지식으로 2유형을 혼자 풀어보고 나서 강의를 들었는데 라벨 인코딩은 set 을 활용해서 train 안에 test 데이터가 다 있다면 따로 합치지 않아도 된다는걸 이제야 알았습니다! 혹시 저처럼 합쳐서 라벨인코딩을 진행하게되면 모델 성능에 큰 영향을 미칠까요? 그리고 합치게 된다면 그냥 원핫 인코딩으로 일관되게 쓰면 되는지도 궁금합니다

답변 2

0

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

안녕하세요~ 제가 영상에서 보여드린 것처럼

평가지표를 기준으로 결정을 하면됩니다.

 

미치는 영향은 데이터에 따라 달라져요 🙂

그냥 원핫만 일관되게 사용하셔도 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. eovnfjfpa님.

라벨 인코딩과 원핫 인코딩은 범주형 데이터를 숫자형으로 변환하기 위한 두 가지 대표적인 방법입니다. 질문 주신 부분에서 합친 데이터를 인코딩 처리할 때의 장단점과 모델의 성능에 미칠 영향에 대해 설명드리겠습니다.

  1. 라벨 인코딩 시, 합친 데이터를 사용하는 이유:

    • 일관성 유지: train과 test 데이터를 별도로 라벨 인코딩하면 각 데이터셋에서 고유값이 다르게 매핑될 위험이 있습니다. 이를 방지하기 위해 두 데이터셋을 concat하여 같은 라벨 값이 동일한 숫자로 매핑되도록 하는 것이 중요합니다.
    • 잠재적 문제점: 모델이 숫자의 크기를 중요하게 여길 수 있습니다. 이는 특정한 범주가 다른 범주보다 우위에 있다고 잘못 해석할 수 있습니다. 특히, 순서가 없는 범주형 변수의 경우 이는 문제로 작용할 수 있습니다.
  2. 라벨 인코딩 대신 원핫 인코딩 활용:

    • 장점: 원핫 인코딩은 범주형 데이터의 순서성을 제거하므로, 모델이 범주형 변수의 크기에 대해 오해하지 않도록 도와줍니다. 합친 데이터에 원핫 인코딩을 적용하면, 모든 범주에 대해 동일한 구조의 열을 생성하여 일관성을 가지게 됩니다.
    • 고려사항: 데이터셋이 매우 큰 경우, 열의 개수가 급격히 늘어날 수 있습니다. 이는 계산 비용을 증가시킬 수 있으므로, 메모리 및 연산 부담을 염두에 두고 적용하시면 좋습니다.
  3. 모델 성능에 대한 영향:

    • 올바른 인코딩 방법을 선택하는 것은 모델의 성능에 큰 영향을 미칠 수 있습니다. 특히, 과대적합을 방지하고 일반화 성능을 높이기 위해 인코딩 방법을 신중하게 선택해야 합니다.
    • 문제의 맥락에 따라 다르지만, 일반적으로 원핫 인코딩이 보다 안정적인 결과를 제공할 수 있습니다.

관련하여 도움이 될 만한 질문 URL을 참고하세요:

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

eovnfjfpa님의 프로필 이미지
eovnfjfpa

작성한 질문수

질문하기