마지막 팁 부분을 먼저 보고 기출 연습을 하고 있는데요, lightgbm을 하는 경우 object 자료형을 category 자료형으로 바꿔주면 인코딩을 따로 할 필요가 없다고 하여 이 방법으로 연습을 진행하고 있습니다. 또, 성능평가를 구하지 않아도 감점되지 않는다고 하여 오류가 나지 않은 한 인코딩과 성능평가 없이 lightgbm으로 푸는 방법으로 연습 중인데, 아래 코드가 제가 작성한 코드입니다. 오류가 나지 않지만, 제출 파일의 내용을 확인한 결과 강사님의 최종 결과와 차이가 있었습니다. (Attrition_Flag 값의 차이) 뭐가 잘 못된 건가요...? import pandas as pd train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ceredit%20card/train.csv") test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ceredit%20card/test.csv") # train = pd.read_csv("train.csv") # test = pd.read_csv("test.csv") # #문제 정의 # 평가: ROC-AUC, 정확도(Accuracy), F1, 정밀도(Precision), 재현율(Recall)을 구하시오 # target : Attrition_Flag (1:이탈, 0:유지) # csv파일 생성 : 수험번호.csv # ROC-AUC -> 분류 # eda # print(train.shape, test.shape) # (8101, 21) (2026, 20) # print(train.info()) # print(test.info()) # print(test.head()) # object -> category cols = train.select_dtypes(include='object') for col in cols: train[col] = train[col].astype('category') test[col] = test[col].astype('category') # 검증 데이터 분리 y_train = train.pop('Attrition_Flag') 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) # lightgbm 학습 및 예측 import lightgbm as lgb model = lgb.LGBMClassifier(random_state=0, verbose=-1) model.fit(X_tr, y_tr) pred = model.predict_proba(X_val) # print(model.classes_) # target : Attrition_Flag (1:이탈, 0:유지) # 결과: [0 1] -> 유지 이탈 (이 순서임) # 성능 평가 # test 예측 및 제출 pred = model.predict_proba(test) # print(pred.shape) # print(test.shape) # print(pred) submit = pd.DataFrame( {'CLIENTNUM':test['CLIENTNUM'], 'Attrition_Flag':pred[:,1]}) submit.to_csv('수험번호.csv', index=False) # 제출 파일 확인 # print(pd.read_csv('수험번호.csv').shape) # (2026, 1) -> test.shape(2026, 20) 위 사진은 제 코드를 실행하여 만든 csv파일의 내용입니다. 다음 사진은 강사님 코드의 실행 결과입니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 스레드를 조인하면 다른 스레드의 작업이 처리될때까지 기다려야한다고 배웠는데, 지금 예시에서는 스레드 수가 여유로워서 괜찮지만 만약 제목대로 임계값을 더 작게 하고, 스레드 수도 줄인다면 처리할 스레드의 수가 부족해져 데드락이 발생할 수도 있는 상황인지 궁금합니다
배치 처리, 시스템 종결의 서막 💀 장에서 중복된 문장 발견. 두 세계의 공존 웹은 실시간 상호작용의 최전선에서 사용자와 연결을 담당한다. 배치는 시스템의 후방에서 대규모 데이터 처리를 책임진다. 둘은 역할이 다르지만, 함께 작동할 때 시스템은 완벽해진다. 함께 작동할 때 시스템은 완벽해진다. 배치가 없다면 시스템의 무게를 견딜 수 없고, 웹이 없다면 사용자와의 연결이 끊어진다. 네가 이 두 세계를 모두 이해하고 다룰 수 있다면, 시스템의 모든 것을 지배할 수 있다.
기출에서는 train, test 모두에 결측치가 없었는데요 혹시 결측치가 있는 데이터가 주어지면 어떻게 해야하는지 궁금합니다. 아래 케이스별로 궁금하고 object 결측치인지 수치형 결측치인지에 따라서도 다르게 해야 할까요? train 에만 결측치가 있는 경우 test 에만 결측치가 있는 경우 train/test 모두에 결측치가 있는 경우
# 최종 제출 파일 (lightGBM) pred = lg.predict(test) submit=pd.DataFrame({'pred':pred}) submit.to_csv("result.csv",index=False) 아래처럼 feature가 맞지 않아서 에러가뜹니다. 강의 그대로 했는데 왜그러는 걸까요?? --------------------------------------------------------------------------- ValueError Traceback (most recent call last) /tmp/ipython-input-50-2529582812.py in <cell line: 0>() 1 # 최종 제출 파일 (lightGBM) ----> 2 pred = lg.predict(test) 3 submit=pd.DataFrame({'pred':pred}) 4 submit.to_csv("result.csv",index=False) 2 frames /usr/local/lib/python3.11/dist-packages/lightgbm/sklearn.py in predict(self, X, raw_score, start_iteration, num_iteration, pred_leaf, pred_contrib, validate_features, **kwargs) 1008 n_features = X.shape[1] 1009 if self._n_features != n_features: -> 1010 raise ValueError( 1011 "Number of features of the model must " 1012 f"match the input. Model n_features_ is {self._n_features} and " ValueError: Number of features of the model must match the input. Model n_features_ is 28 and input n_features is 8
작업형2에서 데이터 전처리할 때 라벨인코딩or원핫인코딩 후 랜포 or lightGBM만 준비해서 가려고 하고 기출 계속 돌려보고 있는데 아직 어떤 경우에 라벨인코딩이 적합하고, 원핫인코딩이 적합한지 구분이 안됩니다 1)어떤 데이터들일때 어떤 인코딩이 적합한건지 궁금합니다! (+현재는 오브젝트타입 라벨인코딩해서 모델 학습한거랑 원핫인코딩해서 모델 학습한거랑 각각 비교해보고 수치 더 좋은걸로 선택했었습니다..!) 2)그리고 항상 데이터 전처리(라벨or원핫인코딩) 전에 target 컬럼 먼저 train에서 복사해서 옮겨놓고 그 후에 데이터전처리를 하는게 맞는걸까요??
시험 환경 작업형2 문제에서 라벨 인코딩을 하기 전에, set을 통해서 train과 test의 unique를 확인하보고 "train이 test를 포함하기 때문에 합칠 필요가 없다"고 말씀을 하셨는데요. 혹시 시험을 볼 때 그것까지 미처 확인해보지 못하고 그냥 다음과 같이 진행을 했을 때 문제가 생길까요..? cols = ['주구매상품', '주구매지점'] from sklearn.preprocessing import LabelEncoder for col in cols: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col])
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 기본 설정인 Gradle로 할때는 문제없는데, 번외로 알려주신 설정인 인텔리제이로 돌리게 되면 스프링부트가 작동하지 않습니다. 해결 방법이 있나요?
실제 시험을 볼때는 뭔가 정신이 없을거같아서 train과 test의 unique값 차이 여부 생각하지 않고 그냥 무조건 train과 test를 concat으로 합치고 레이블 인코딩 진행한 후 train과 test를 분리하고자 하는데 이렇게 진행해도 괜찮을까요? 데이터 누수(?), 과적합가능성 있다고 들어서 질문드립니다.
안녕하세요. Chat gpt에서 lightGBM 전에는 아래와 같이 코딩을 해주면 된다고 하는데, 책이나 강의에서는 랜덤포레스트와 동일하게 원핫 인코딩이나 라벨인코더를 사용하고 있습니다. 어떻게 하는게 맞는건가요? train = train.astype('category') test = test.astype('category')