강의

멘토링

로드맵

Inflearn brand logo image

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

이선희님의 프로필 이미지
이선희

작성한 질문수

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

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

모의문제 작업형 2 코드 ㅠㅠㅠ 제가 작성한 코드에 어디에 문제가 있는것일까요?

해결된 질문

작성

·

38

0

  • import pandas as pd

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

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

    #

    print(train.shape, test.shape)

    #결측치 채우기

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

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

    # print(train.isnull().sum())

    #범주형컬럼 카테고리 수 확인하기

    cols=train.select_dtypes(include="O").columns

    print(cols)

    for col in cols:

    same=set(train[col].unique())==set(test[col].unique())

    print(col,same)

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

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

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

    mid=len(train)

    #데이터 합치고 인코딩 후 다시 분할하기

    df=pd.concat([train,test],axis=0)

    print(df)

    #라벨인코딩하기

    from sklearn.preprocessing import LabelEncoder

    le=LabelEncoder()

    for col in cols:

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

    # print(df.head(8))

    #다시 나누기

    train=df.iloc[:mid].copy()

    test=df.iloc[mid:].copy()

    print(train.shape, test.shape)

    #민맥스스케일링(추후)

    #train데이터 분할하기

    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=100)

    # #모델구축(1) #707.539

    # from sklearn.ensemble import RandomForestRegressor

    # model=RandomForestRegressor(random_state=100)

    # model.fit(X_tr, y_tr)

    # pred=model.predict(X_val)

    #모델구축(2) 705.1955

    import lightgbm as lgb

    model=lgb.LGBMRegressor(random_state=0, verbose=-1)

    model.fit(X_tr, y_tr)

    pred=model.predict(X_val)

    #성능평가RMSE

    from sklearn.metrics import root_mean_squared_error

    print(root_mean_squared_error(y_val, pred))

 

성능평가한 값이 선생님 결과랑 터무니없이 차이가 많이 나네요 ㅠㅠ어디가 잘못된걸까요

답변 3

0

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

질문의 이유를 찾았습니다.

제가 영상에 빠르게 자막처리 할게요

랜포 800대 점수가 나오는 것이 정상입니다.

(lightgbm 700대)

 

작업형2가 새로 나오면서 주최측에서 안내 없이 데이터를 3번이나 변경하다보니 그 사이 촬영이 되어 그렇습니다.

0

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

문제 없습니다.

저는 800점대는데

지금 점수가 훨씬 좋은 점수입니다.

0

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

작성하신 코드를 검토해보니, 기본적인 데이터 전처리 및 모델 학습 과정이 잘 구성되어 있습니다. 하지만 성능(RMSE)이 선생님 결과와 크게 차이가 나는 경우는 다음 사항들을 점검해보시면 좋을 것 같습니다.

1. 데이터 전처리 관련 사항

  • fillna로 결측치를 채우실 때, traintest에서 같은 중간값으로 채우시는 게 문제가 될 수는 없습니다만, 전체 데이터의 분포에 따라 달라질 수 있습니다. 만약 데이터 분포에 따라 너무 큰 차이가 있다면 다시 확인이 필요할 수 있습니다.
  • 범주형 데이터를 라벨 인코딩하는 과정에서, 컬럼별 유니크한 값의 범위가 traintest가 달라지지 않았는지 확인해 보십시오.

2. 모델 및 파라미터 설정

  • LGBMRegressor를 사용할 때, random_state와 기타 파라미터들이 전혀 다른 결과를 초래할 수 있습니다. 동일한 조건이 설정되었는지 확인하세요.
  • verbose=-1은 출력을 억제하지만, 학습과정의 디버그 정보가 필요하다면 다른 값을 사용하여 출력을 살펴보시는 것도 방법입니다.

3. 성능평가 방식 및 최적화

  • root_mean_squared_error 대신 mean_squared_error를 사용하고 squared=False를 설정하여 RMSE를 직접 계산하십시오.
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_val, pred, squared=False)
print("RMSE:", rmse)
  • 모델 학습환경: 학습한 데이터에 따라 동작의 차이가 있을 수 있습니다. 동일한 데이터셋인지, 전처리 및 학습과정이 선생님 코드와 일치하는지 꼼꼼히 비교해보세요.

추천 게시글

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

이선희님의 프로필 이미지
이선희

작성한 질문수

질문하기