실기 2, 3 유형 공부를 안 해서 시험치러 갈까말까 고민하다가 시험날 아침에 이 영상 보고 코드 사진 찍어서 시험 직전까지 외우고 쳤는데 2유형 30점 받고 실기 합격했습니다~ 실무에서 퍼포먼스 내려는 용도라면 다른 좋은 강의들이 많겠지만 시험 합격용으로는 영상 제목처럼 이 영상 하나로 충분하네요. 꼭 필요한 내용만 간결하게 있어서 좋았습니다.
영상감사합니다. 2유형에 대해서 전체적인 이해가 너무 필요했는데 정말 잘봤습니다. 질문이 있어서 한번 남겨봅니다.. cross validation을 따로 하시지 않은 것 같은데, 혹시 이유가 있을까요? 추가로 진행한다면 빅분기에서 좀더 점수를 받을 수 있을까 궁금합니다.
시험에서는 test데이터의 종속변수가 주어지지 않기때문에 test데이터에 대한 성능평가를 할 수가 없습니다. 따라서 train 데이터 중 일부를 학습시켜 모델링하고 또다른 일부를 사용하여 성능을 평가해보는것이죠. 작업형 2의 경우 예측한 모델의 성능이 평가에 지표가 되기때문에 해당 부분은 반드시 작업해주셔야 합니다. 혹시나 모델 성능이 좋지 않게 나온다고 판단 되면 하이퍼파라미터 변경, 모델 변경 등 모델을 리모델링 하는 작업이 필요하니깐요.
라벨 인코딩 부분에서.. 위 수정 코드를 for 문으로 대체 하려고 하는데... fit은 train 데이터 셋에서만 하는게 맞나요? 아래처럼요. for col in train_col_obj: le.fit(train[col]) train[col]=le.transform(train[col]) test[col]=le.transform(test[col])
train_col_obj = ['주구매상품','주구매지점'] for col in train_col_obj: le.fit(train[col]) train[col]=le.transform(train[col]) test[col]=le.transform(test[col]) 네 for 문으로 작성하시고 싶은 경우 위와 같은 형태로 코드 작성하시면 됩니다.
환불금액의 결측치는 0이 이상적이라 생각해서 0으로 채워서 풀어도 괜찮을까요? 물론 보통은 평균이나 최빈값 등으로 대체하는거론 알고있어요 혹시 애매하다 생각들면 전처리 후 모델평가까지 한 값과, 다시 다르게 전처리하고 모델평가해서 더 나은 값 찾는건 리스크가 있는걸까요..?
음...기존에 기출 사례를 보면 "특정 컬럼의 데이터 중 0으로 입력되어있는 값은 결측값으로 보고 연산에서 제외한다."라는 조건이 있었거든요. 제가 평가기관은 아니라서 확답을 드릴 순 없지만 결측값 대체값으로 0값은 적절해보이지 않습니다. 기왕 대체할 것이라면 다른 값으로 대체하는게 더욱 적합할 것 같아요.
넣으시면 입력 데이터가 달리지기 때문에 예측결과가 달라질 수 있습니다. 모델 학습하실때 분석에 불필요한 데이터는 빼주셔야 모델 연산이 덜 복잡해져요. 더욱이 제가 사용한 랜덤포래스트 모델은 애초에 앙상블 모델이라 기본적으로 어느정도 연산량이 있기때문에 저는 ID는 제외하고 작업하시는 것을 추천드립니다. 실제 시험에서 코드 실행 시간(런타임)이 1분이 넘으면 오류가 나거든요.
정말 기초적인 질문이라 죄송합니다. 1.X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2024) 이 부분에서 X_test를 X_val로 푸시는 분들이 있는데 그냥 단순히 변수명만 다르게 한건가요..? 아니면 검증같은 추가적인 절차의 의미가 있는건가요? 2. 전처리? 과정에서 pop함수를 사용하시는 분들이 있는데 어떨 때 쓰는건가요.. 선생님 코드에서 동일한 내용이 있는건가요? pop함수 이해안되는데 굳이 안써도 되겠죠..
죄송하지 않으셔도 됩니다. 1. X_val은 검증용으로 사용한다는 의미로 변수명을 그렇게 사용하신거 같습니다. 2. pop() 함수는 리스트의 특정 인덱스 값을 삭제 및 반환하는 기능을 갖고 있습니다. 전처리 과정 중에 필요 없는 값을 지우실 때 사용하신거 같아요. ^^ 전처리 방법은 굉장히 다양합니다. (사용되는 함수들도 다양하구요.) 여러가지 코드 보시면서 자신만의 기준을 세워서 가장 편안한 방법으로 코딩하시면 되요! 화이팅!
1. 분류 모델에서 종속변수(성별)가 범주형(문자형)인 경우에는 별도로 수치형으로 변환할 필요 없습니다. 종속변수가 train, test 데이터에 둘 다 있다면 train 데이터의 독립변수(X) 지정할 때(X = train.drop(columns=['성별','회원ID']))와 test 데이터 예측할 때만 제외하시면 돼요. 그런데 실제 시험에서는 test 데이터에 종속변수가 포함되어있지 않으니 이 부분은 별도로 걱정안하셔도 될 것 같네요. 2. drop 부분이 헷갈리신다면 ID 넣고 작업하셔도 괜찮습니다. (입력 데이터가 달라지니 결과가 조금 달라질 뿐이죠.)
정리! 이 영상은 진흥원 공개 뮨제로 실제 시험과 동일한 데이터 형태를 가지죠? 즉, Test 데이터에 타겟변수인 성별이 없어요. 회원 Id 따로 빼지 않고 작업한다면 독립변수는 X = train.drop(columns=['성별']) 이렇게 지정하면되고 아래 test 데이터 예측시에는 컬럼 drop없이 pred2=rfc.predict(test) 하심되요.
영상 감사합니다. 혹시 마지막 제출 코드를 result=pd.DataFrame({'pred':pred2}) result.to_csv('result.csv',index=False) #print('result.csv') 이렇게 제출해도 될까요?? 결과는 같게 나오는거 같습니다.
선생님 살려주세요 ㅠㅠ 선생님 강의보고 정말 감을 잡았다고 생각했는데 다른 것들도 보다보니 시험때 주는 데이터가 X_train, X_test, y_train이라는데 이 경우에는 코드가 어떻게 되는지 알려주실수 있나요.. 제가 해보려고 했는데 너무 헷갈려서요... 가능하시면 부탁드립니다... 인코더는 어떻게 해야할지, train_test_split은 해야할지 말아야할지... 그리고 랜덤포레스트 pred2에는 어떤걸 넣어야할지 모르겠네요 전체 코드를 알려주시면 진짜! 감사합니다!! 제가 모르는 부분만 알려주셔도 정말 감사할거같습니다,,, 다른 분 코드를 외우려니 선생님 코드가 정말 직관적이고 이해가 잘돼서요,,,
제가 올려드린 코드에 전체적인 작업이 다 나와있는 상황이라서 이 부분들로 전체 흐름 파악하시고 외우시면 될거같아요. 그리고 라벨인코딩 부분은 제가 수정해드린대로 보시면 되구요. 올려드린 영상 자체가 시험 환경에서 동일하게 직업할 수 있는 데이터이기때문에 영상설명대로 코딩하시면 됩니다! 첨언! 시험때 제공되는 데이터는 train, test 이구요. 이 중에 train 데이터로 모델링하여 학습하고 평가를 해야하니 train test split 하게되는겁니다. 헷갈리시면 안돼요!
@@aiaiyouknow1063 정말 감사합니다!! 선생님 한가지 더 질문이 있는데 테스트 데이터 예측할때 test데이터에 종속변수나 ID칼럼이 없다면 test_X = test.drop(columns=['회원ID']) 이런 과정을 거치지 않고 그냥 test값을 넣으면 되나요??
코드에서 test_X = test.drop(columns=['회원ID']) 이렇게 작업한 이유는 회원 ID는 모델 분석에 중요하게 사용되는 변수가 아니라고 생각되어서 제가 제외한거구요. 말씀하신것처럼 test 데이터에 종속변수 컬럼이 없어서 test_X = test.drop(columns=['회원ID']) 이 작업을 하지 않는다는거와는 다른 개념입니다! 왜냐면 실제 시험에서는 test 데이터에 종속변수가 원래 없기때문에 test데이터에 종속변수 컬럼을 제거해주는 작업을 하실 필요가 없거든요. 처음에 데이터 분할할때도 X = train.drop(columns=['성별','회원ID']) y = train['성별'] 이렇게 모델학습에 사용되는 독립변수에 회원 ID를 제외하고 분석했으니 test 데이터에도 회원 ID를 제거해서 예측한거랍니다.
안녕하세요 선생님 좋은 강의 감사합니다. 혹시 만약 처음에 제공되는게 X_train=pd.read_csv("") X_test=pd.read_csv() y_train=pd.read_csv() 이렇게 제공되어도 다 지우고 선생님이 하신 것처럼 맨 처음 train= test= 로 진행해도 되나요?
감사히 잘보고 있습니다. 회귀편도 봤는데요. 라벨인코딩시에 회귀편에서는 df['성별'] = le.fit_transform(df[['성별']]) 이런식이었는데, 시험환경에서는 이렇게 쓰면 오류를 표출하구요 분류편에서 코드 작성하신대로 df['성별'] = le.fit_transform(df['성별']) 이렇게 하면 시험환경에서 오류가 안나더라구 어떤 형태로 코드를 작성해야 하는걸까요.
네 사실 엄격하게 말씀드리자면 말씀주신 부분이 맞습니다. 하지만 빅분기 시험에서는 해당 부분에 대한 별도의 제한을 두지 않기에 영상처럼 코드를 설명드렸습니다. (저 역시 실제 보기와 같은 형태로 라벨인코딩을 진행했으나 별도의 감점 요인이 없었습니다. ) 제가 올려드린대로 하셔도 사실 크게 문제는 없지만 혹시나 신경이 쓰이신다면 라벨인코딩 부분을 아래와 같이 수정해서 학습해주시면 됩니다. ^^ (참고적으로 아래와 같이 라벨인코딩 했을때와 영상에서 설명드린 코드로 실행했을 때, 검증 결과는 동일했습니다.) le.fit(train['주구매상품']) train['주구매상품'] = le.transform(train['주구매상품']) test['주구매상품'] = le.transform(test['주구매상품']) le.fit(train['주구매지점']) train['주구매지점'] = le.transform(train['주구매지점']) test['주구매지점'] = le.transform(test['주구매지점']) 혹시 헷갈리신다면 아래의 영상을 참고해주세요! ua-cam.com/video/WWR--wyhiAI/v-deo.html
@@김재형-n7h 좋은 지적입니다! roc_auc를 평가지표로 사용할 때는 보통 predict_proba()로 예측을 하죠. 그렇지만 샘플 문제에서 종속변수(성별)로 분류될 확률을 예측하라는 언급이 없었고, 제출 파일 예시 또한 예측 확률이 아닌 0또는 1로 분류된 결과가 안내되어 있었기에 predict()로 데이터를 예측한 것입니다. 정리하자면! "문제에서 평가지표가 roc_auc로 나온경우 종속변수로 분류될 "확률"을 구하라는 언급이 있을 때 predict_proba()를 사용한다." 라고 보시면 될 것 같습니다.
안녕하세요 어제부터 2유형 막 시작한 비전공 수험자인데요 아무것도 모르는 상태에서 그냥 들이박다가 영상보고 푸는 느낌? 돌아가는 과정은 살짝 감 잡은 것 같은데 궁금한게 있습니다 1. 다른 분들 예시문제 보면 x_train, y_train, x_test 보통 이렇게 3가지가 주어지던데 영상처럼 체험문제 같이 train과 test 이렇게 2가지 주어지면 풀 때 서로 어떤걸 주의하면서 풀어야하나요? 2. random state = 2024가 3500개 중에 랜덤으로 뽑을거고 뽑은 2024개를 고정하는 느낌인 것 같은데 데이터 수에 따라 정하는 값이 다를 것 같은데 기준 같은게 있는건가요?
1. 보통 시험에서는 제가 영상에서 설명드리는대로 Train 데이터와 Test 데이터가 주어지고, 작업하도록 안내될거예요. 따라서 영상에서 보여드린대로 작업하시면 무리 없이 코딩 가능하실겁니다! 사용하는 데이터에 따라 혹은 코딩 방식에 따라 코드는 차이가 있을 수 있어요. 2. 랜덤스테이트 값은 랜덤하게 수치를 가져오되 고정값(2024 등)을 넣으면 그 값을 넣을때는 동일한 랜덤값들이 추출되어 결과 성능을 고정할 수 있기에 사용되요. 즉 10을 넣을때는 그러한 랜덤값이 123을 넣을때는 그러한 랜덤값이 추출된단 이야기죠. 랜던값 추출은 내부 연산 기준으로 추출됩니다. 이때 랜덤값은 다른 정수를 넣어도 되요. 랜덤스테이트는 입력하는 수치 자체가 중요한것이 아니라 코드를 실행할때마다 추출되는 데이터가 달라져서 정확도가 바뀌는 것을 방지하기 위함이라고 이해해주심 될 것 같네요!
강의 감사합니다! 마지막에 pred2 부분이 잘 이해가 안 되어서 질문드립니다..! 지금 제가 이해한걸론 train 데이터로 훈련된 rfc 모델에 X_test 데이터를 넣으면 끝날꺼 같은데, test_X를 따로 만들어주는 이유가 무엇일까요? pred1 : train 데이터에대한 예측 값이라고 되어있는데 pred1도 X_test여서 test 데이터에 대한 예측값이 아닌가 싶은게 현재 이해 상황입니다!..
시험에서는 Train 데이터는 독립변수와 종속변수가 주어지지만 Test 데이터는 독립변수만 주어집니다. 그 이유는 Train 데이터의 일부를 학습데이터로 사용하여 모델을 학습시키고 그 모델로 예측한 결과(pred1)를 실제 데이터(y_test)와 비교하면서 성능을 평가하기 위함이죠. train test split 함수로 나눈것은 Train 데이터를 80퍼센트는 학습으로 20퍼센트는 테스트로 나누겠다는 겁니다. 그러니 pred1은 성능평가를 위한 Train데이터의 예측값인거구요. 시험에서는 어느정도 성능이 완성된 모델을 가지고 Test 데이터를 활용하여 목표변수값을 예측해내야하므로 pred2에 예측값을 저장하여 결과를 제출하는 것입니다! 이부분에서 많이들 혼동하시는데 헷갈리시면 안대요.
안녕하세요! 영상 감사합니다 질문이 있어 댓글 남깁니다. 1. 데이터 분할할때 x = train.drop(columns=[‘성별‘,’회원id’] y = train[‘성별‘] 이렇게만 분할 해도 점수 잘 나올까요..? 위에처럼 종속/독립으로 분할하는 변수 지정하는걸로만 여태 공부해왔는데 사용하던 코드가 아니라서 제가 잘못하고 있나 불안하네요ㅠㅠ 2. 성능 평가하는 부분은 시험에 점수로 반영되는 부분은 아닌거죵? 3. 모델 학습할때 rfc=RandomForestClassifier() 이 괄호 안에 아무것도 안적고 돌려도 괜찮을까요? 제가 딱 기본만 외워가려고 하는데 급 혼란오네요 ㅠㅠ 이렇게만 해도 점수가 나올란지요…. 3가지 답변 해주시면 정말 감사하겠습니다!!!
1. 네 그렇게 하셔도 됩니다. 2. 시험에서 성능평가 지표로 주신 기준(F1-score, RMSE 등)은 저희가 최종적으로 제출한 데이터의 평가 기준으로 사용됩니다. 즉 저희가 코드에서 확인하는 것은 트레인 데이터에 대한 성능으로 대략적인 모델 성능을 확인하는 용도라고 보심되요.(테스트 데이터에 대한 종속변수가 시험에서는 주어지지 않아서 테스트 데이터에 대한 성능평가 결과는 저희가 알 수 없으니깐요!) 3. 그렇게 하셔도 됩니다. 그럴 경우 파라미터 기본 설정값으로 모델링 및 학습됩니다. 다만 성능이 아쉬운경우 영상의 설명처럼 파라미터 값을 수정하면서 결과 확인하심되요!
LabelEncoder 관련 질문 있습니다. train['주구매지점'] = le.fit_transform(train['주구매지점']) test['주구매지점'] = le.fit_transform(test['주구매지점']) 이렇게 하면 개별적으로 encoding이 되기 때문에 부정확한거 아닌가요? 예를 들어 train 데이터에서 '주구매지점' 내에서 '이마트':0 , '홈플러스':1, '롯데':2 로 인코딩하였는데 test 데이터에서 '주구매지점' 내 '이마트':2 , '홈플러스':0, '롯데':1 로 인코딩 될 수도 있잖아요. 그러면 같은 모델에 돌리는게 의미가 없을 것 같은데, 제가 이해를 못한건지 궁금해서 질문드립니다. 제가 알기로는 train['주구매지점'] = le.fit_transform(train['주구매지점']) 으로 인코딩에 대한 기준을 세우고 test['주구매지점'] = le.transform(test['주구매지점']) 으로 test 데이터에 그 기준을 transform 하는 걸로 알고 있습니다.
영상에서 전처리 부분 코드를 수정하여 아래와 같이 사용해주세요! (변경된 코드 영상 설명에 적어드렸습니다.) from sklearn.preprocessing import LabelEncoder le = LabelEncoder() le.fit(train['주구매상품']) train['주구매상품'] = le.transform(train['주구매상품']) test['주구매상품'] = le.transform(test['주구매상품']) le.fit(train['주구매지점']) train['주구매지점'] = le.transform(train['주구매지점']) test['주구매지점'] = le.transform(test['주구매지점'])
train['주구매지점'] = le.fit_transform(train['주구매지점']) test['주구매지점'] = le.fit_transform(test['주구매지점']) 이런식으로 하면 새로 학습되기 때문에 굉장히 위험해요. (train) 가 나 다 라 -> 0 1 2 3 (test) 가 나 라 -> 0 1 2 이렇게 되기때문에 train에서는 라가 3인데 test에서는 라가 2에요. 아마 선생님께서 시험때 문제 없었던 이유는 train과 test의 차이가 별로 없어서 그랬나보네요.
@hammmmmmmmmmm 네 통일해서 사용해도 전혀 문제 없어요. 현재 기준 분류 회귀 이렇게 유형이 출제되는 상황이라 그렇게 준비하시면 작업에 무리 없을거예요. 그래도 시험 전까지 시간이 좀? 있으니 수험서나 각종 자료들 보시면서 다양한 내용들 참고해 두심 더 좋겠죠?
널값 채울때! train['환불금액'].fillna(train.groupby('성별')['환불금액'].transform('mean'), inplace=True) test['환불금액'].fillna(test['환불금액'].mode()[0], inplace=True) 이런식으로 train에서는 정답값 그룹화해서 채워넣고 test는 정답값이 없으니 그냥 최빈값으로 채워 넣고 이런식으로 해도 되나요??? auc값은 대폭 상승하긴 합니다. 다만 두 세트 널값 채우는 방식이 달라 틀리게 할거 같아 궁금하여 질문합니다!!!!
라벨인코딩이 문자열 데이터를 수치형으로 바꿔주는 것이고, 데이터를 분석하고자 하는 경우 컬럼 데이터에 문자열 데이터가 포함된 경우 연산이 어렵기 때문에 분석에 사용하고자하는 컬럼은 트레인 데이터와 테스트 데이터에 모두 라벨인코딩 처리를 전처리작업으로 해줍니다. 그때 사용되는 함수가 fit_transform()이구요. 어떠한 오류인지는 제가 확인이 되지 않아 정확히 모르겠지만 영상 설명에 전체 코드 넣어두었으니 한번 참고해보시면 좋을것같습니다.
실기 2, 3 유형 공부를 안 해서 시험치러 갈까말까 고민하다가 시험날 아침에 이 영상 보고 코드 사진 찍어서 시험 직전까지 외우고 쳤는데 2유형 30점 받고 실기 합격했습니다~ 실무에서 퍼포먼스 내려는 용도라면 다른 좋은 강의들이 많겠지만 시험 합격용으로는 영상 제목처럼 이 영상 하나로 충분하네요. 꼭 필요한 내용만 간결하게 있어서 좋았습니다.
제가 다 뿌듯하네요. ^^ 마지막까지 포기하지 않고 잘해주셔서 좋은 결과 있었던것 같아요! 정말 축하드립니다!
진짜 댓글 잘 안남기는데 지금까지 흩어진 퍼즐이 다 맞춰진 느낌이에요 감사합니다!
빅분기 실기 관련 여러 유투브를 들었지만.. 여기설명 자료 너무 이해하기 쉽게 강의해주셔서 감사할 따름입니다. 차주시험까지 10번씩 복습해서 합격해보도록 하겠습니다 ^^ 감사합니다
감사합니다! 꼭 합격하세요!! 😃
강의듣고 오늘 2유형 만점 합격했습니다 감사합니다
우앗! 만점! 합격 너무너무 축하드립니다! 😆
설명 잘해 주셔서 감사합니다. 도움 많이 되었습니다.
설명 겁나 잘하시네요...실질적으론 유일하게 도움되는 강의입니다 ^^ 감사합니다
시험 얼마 남지 않았는데 ㅎㅎ 전체적 내용을 한번에 파악할수있게 남겨주셔서 감사합니다!
교수님 감사합니다
선생님 덕분에 2유형은 잘 풀고 왔습니다 너무 감사합니다
선생님 알려주신 코드외워 그래도 랜포분류 돌리고
F1스코어 0.68정도 나왔는데 만점 받을 수 있을까요ㅠ
정해진 규정대로 잘 작업하셨으면 문제 없을것같아요. 😀 고생하셨어요.
너무 깔끔하네요~
저 회귀도 올려주세요! 너무 깔끔한강의 조아요❤❤
좋은 영상 너무 감사합니다! 시험 앞두고 많은 도움이 될 것 같네요~
혹시 숫자형 변수 스케일링은 따로 하지 않아도 되나요?
우선 저는 최소한의 작업을 설명드렸구요. 분석가의 입장에서 추가적인 작업이 필요하다고 느껴지면 스케일링 하셔도 물론 됩니다.
train 에서 몇개 데이터 열들을 (종속 변수 제외 2개정도) drop했는데
큰 상관이 있나요? 제 판단에서 그 데이터들은 독립변수가 아니라고 판단했습니당
어떤 변수를 drop 하셨는지 제가 확인이 안돼서 정확히 말씀드릴 순 없지만 분석하시고, 성능 평가했을 때 성능이 어느 정도 잘 나왔다면 작업 잘 된 거라고 보시면 됩니다. 😊
영상감사합니다. 2유형에 대해서 전체적인 이해가 너무 필요했는데 정말 잘봤습니다.
질문이 있어서 한번 남겨봅니다..
cross validation을 따로 하시지 않은 것 같은데, 혹시 이유가 있을까요? 추가로 진행한다면 빅분기에서 좀더 점수를 받을 수 있을까 궁금합니다.
물론 하셔도 됩니다. 제가 작성한 코드는 정리가 필요하신분들 혹은 참고용으로 최대한 복잡하지 않은 방법을 설명드린거예요!
안녕하세요 너무너무 좋은 강의 잘 들었습니다!! 2유형은 이해가 잘 안됐었는데 이 영상으로 이해가 팍 됐어요😂😂 실제 시험도 이것과 비슷한 난이도로 나올까요?😢
네 전체적인 흐름 파악해서 작업하실 수 있으면 무난히 좋은 점수 받으실 수 있을거예요! 다만 딱 요 문제만 풀어보고 가시면 안댑니다!
@@aiaiyouknow1063 넵 알겠습니다!! 열심히 해서 합격해보겠습니당💖💖
영상 감사합니다. 1유형 예시문제도 해주시면 감사하겠습니다~
커밍 순 입니다!
교수님 질문이요pred1=rfc.predict(X_test) 이 부분을 한 이유가 뭔가요?? 저 부분 건너뛰고 pred2를 구하는것을 바로 진행해도 문제 없나요? 성능을 보기위해서 하는건가요? 그렇다면 pred2로는 성능을 보지않는 이유는 같은 모델이라서 그런건가요?
시험에서는 test데이터의 종속변수가 주어지지
않기때문에 test데이터에 대한 성능평가를 할 수가 없습니다.
따라서 train 데이터 중 일부를 학습시켜 모델링하고 또다른 일부를 사용하여 성능을 평가해보는것이죠. 작업형 2의 경우 예측한 모델의 성능이 평가에 지표가 되기때문에 해당 부분은 반드시 작업해주셔야 합니다.
혹시나 모델 성능이 좋지 않게 나온다고 판단 되면 하이퍼파라미터 변경, 모델 변경 등 모델을 리모델링 하는 작업이 필요하니깐요.
라벨 인코딩 부분에서.. 위 수정 코드를 for 문으로 대체 하려고 하는데... fit은 train 데이터 셋에서만 하는게 맞나요? 아래처럼요.
for col in train_col_obj:
le.fit(train[col])
train[col]=le.transform(train[col])
test[col]=le.transform(test[col])
train_col_obj = ['주구매상품','주구매지점']
for col in train_col_obj:
le.fit(train[col])
train[col]=le.transform(train[col])
test[col]=le.transform(test[col])
네 for 문으로 작성하시고 싶은 경우 위와 같은 형태로 코드 작성하시면 됩니다.
환불금액의 결측치는 0이 이상적이라 생각해서 0으로 채워서 풀어도 괜찮을까요? 물론 보통은 평균이나 최빈값 등으로 대체하는거론 알고있어요
혹시 애매하다 생각들면 전처리 후 모델평가까지 한 값과, 다시 다르게 전처리하고 모델평가해서 더 나은 값 찾는건 리스크가 있는걸까요..?
음...기존에 기출 사례를 보면 "특정 컬럼의 데이터 중 0으로 입력되어있는 값은 결측값으로 보고 연산에서 제외한다."라는 조건이 있었거든요. 제가 평가기관은 아니라서 확답을 드릴 순 없지만 결측값 대체값으로 0값은 적절해보이지 않습니다.
기왕 대체할 것이라면 다른 값으로 대체하는게 더욱 적합할 것 같아요.
안녕하세요 :) 칼럼에 범주가 2개라(예를 들어 남성 여성) 하더라도 라벨인코더 사용해서 수치형 데이터로 바꾸어도 괜찮을까요?
원핫인코딩 더미변수화 보다는 라벨인코더가 깔끔한 것 같아서요!
네 가능합니다.
초보적인 질문인데요 회원 ID를 drop 해도 안 해도 결과는 같을까요? test_x 쪽에 drop 하는 작업도 없어지는데 그렇다고 해도 영향없는지 궁금하네요
넣으시면 입력 데이터가 달리지기 때문에 예측결과가 달라질 수 있습니다.
모델 학습하실때 분석에 불필요한 데이터는 빼주셔야 모델 연산이 덜 복잡해져요.
더욱이 제가 사용한 랜덤포래스트 모델은 애초에 앙상블 모델이라 기본적으로 어느정도 연산량이 있기때문에 저는 ID는 제외하고 작업하시는 것을 추천드립니다.
실제 시험에서 코드 실행 시간(런타임)이 1분이 넘으면 오류가 나거든요.
정말 기초적인 질문이라 죄송합니다.
1.X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2024) 이 부분에서 X_test를 X_val로 푸시는 분들이 있는데 그냥 단순히 변수명만 다르게 한건가요..? 아니면 검증같은 추가적인 절차의 의미가 있는건가요?
2. 전처리? 과정에서 pop함수를 사용하시는 분들이 있는데 어떨 때 쓰는건가요.. 선생님 코드에서 동일한 내용이 있는건가요? pop함수 이해안되는데 굳이 안써도 되겠죠..
죄송하지 않으셔도 됩니다.
1. X_val은 검증용으로 사용한다는 의미로 변수명을 그렇게 사용하신거 같습니다.
2. pop() 함수는 리스트의 특정 인덱스 값을 삭제 및 반환하는 기능을 갖고 있습니다. 전처리 과정 중에 필요 없는 값을 지우실 때 사용하신거 같아요. ^^ 전처리 방법은 굉장히 다양합니다. (사용되는 함수들도 다양하구요.) 여러가지 코드 보시면서 자신만의 기준을 세워서 가장 편안한 방법으로 코딩하시면 되요!
화이팅!
질문1만약 성별이 오브젝트형데이터이고 학습데이터 ,테스트 데이터 둘다에 있따면 둘다 라벨인코딩해주고 테스트데이터에도 예측할때도 drop으로 성별 뺴줘야하나요?
질문2 train처음에 drop할떄 회원ID
1. 분류 모델에서 종속변수(성별)가 범주형(문자형)인 경우에는 별도로 수치형으로 변환할 필요 없습니다.
종속변수가 train, test 데이터에 둘 다 있다면 train 데이터의 독립변수(X) 지정할 때(X = train.drop(columns=['성별','회원ID']))와 test 데이터 예측할 때만 제외하시면 돼요.
그런데 실제 시험에서는 test 데이터에 종속변수가 포함되어있지 않으니 이 부분은 별도로 걱정안하셔도 될 것 같네요.
2. drop 부분이 헷갈리신다면 ID 넣고 작업하셔도 괜찮습니다. (입력 데이터가 달라지니 결과가 조금 달라질 뿐이죠.)
@aiaiyouknow1063 항상 답 빨리쥬셔서 감사해요
타 브랜드 실기책 ,강의로 시작했는데 여기책 모의고사기출문제 오타도 너무많규 실제유형과 틀린게 넘 많네요..
선생님을 일찍알았다묜 진작할껀디..
탈락하면 4월에 뵙게씀다 ㅜㅜ
@nono33322 합격하실 수 있어요! 화이팅!
@@aiaiyouknow1063 이영상기준으로 테스트데이터엔 성별이없다는가정.
drop회원id넣을지안넣을지 몰라서 타겟데이터인 성별만 처음트레인에 넣었다고 가정했을떄 아래 테스트데이터예측 드랍에는 아무것도 넣을 필요가없는건가요?
회원id드랍이 빠지니까 쓸게없잖아욤.
그리고 1번에 대한 이은 질문입니다만ㅜㅜ
영상기준으로 종속변수인 성별이 이미 int로 변환되있어서 라벨인코딩 안하는거아닌가욤?
다른문제에서 만약에 종속변수가 오브젝트형으로 되있으면 라벨인코딩으로 해주는게아니에요?
정리!
이 영상은 진흥원 공개 뮨제로 실제 시험과 동일한 데이터 형태를 가지죠? 즉, Test 데이터에 타겟변수인 성별이 없어요.
회원 Id 따로 빼지 않고 작업한다면 독립변수는
X = train.drop(columns=['성별'])
이렇게 지정하면되고
아래 test 데이터 예측시에는 컬럼 drop없이
pred2=rfc.predict(test) 하심되요.
영상 감사합니다.
혹시 마지막 제출 코드를
result=pd.DataFrame({'pred':pred2})
result.to_csv('result.csv',index=False)
#print('result.csv')
이렇게 제출해도 될까요??
결과는 같게 나오는거 같습니다.
네 그렇게 하셔도됩니다. 다만 마지막 코드는 print(result)로 확인해보셔야겠죠?
넵 감사합니다 !
좋은 답변 감사합니다 혹시 성능 평가 단계는 굳이 하지 않아도 괜찮나요?
성능평가 기준으로 채점 되기때문에 해두셔야 합니다!
선생님 살려주세요 ㅠㅠ
선생님 강의보고 정말 감을 잡았다고 생각했는데 다른 것들도 보다보니
시험때 주는 데이터가 X_train, X_test, y_train이라는데 이 경우에는 코드가 어떻게 되는지 알려주실수 있나요..
제가 해보려고 했는데 너무 헷갈려서요... 가능하시면 부탁드립니다...
인코더는 어떻게 해야할지, train_test_split은 해야할지 말아야할지... 그리고 랜덤포레스트 pred2에는 어떤걸 넣어야할지 모르겠네요
전체 코드를 알려주시면 진짜! 감사합니다!! 제가 모르는 부분만 알려주셔도 정말 감사할거같습니다,,,
다른 분 코드를 외우려니 선생님 코드가 정말 직관적이고 이해가 잘돼서요,,,
제가 올려드린 코드에 전체적인 작업이 다 나와있는 상황이라서 이 부분들로 전체 흐름 파악하시고 외우시면 될거같아요. 그리고 라벨인코딩 부분은 제가 수정해드린대로 보시면 되구요.
올려드린 영상 자체가 시험 환경에서 동일하게 직업할 수 있는 데이터이기때문에 영상설명대로 코딩하시면 됩니다!
첨언!
시험때 제공되는 데이터는 train, test 이구요. 이 중에 train 데이터로 모델링하여 학습하고 평가를 해야하니 train test split 하게되는겁니다. 헷갈리시면 안돼요!
@@aiaiyouknow1063 정말 감사합니다!! 선생님 한가지 더 질문이 있는데 테스트 데이터 예측할때 test데이터에 종속변수나 ID칼럼이 없다면 test_X = test.drop(columns=['회원ID']) 이런 과정을 거치지 않고 그냥 test값을 넣으면 되나요??
코드에서 test_X = test.drop(columns=['회원ID']) 이렇게 작업한 이유는 회원 ID는 모델 분석에 중요하게 사용되는 변수가 아니라고 생각되어서 제가 제외한거구요.
말씀하신것처럼 test 데이터에 종속변수 컬럼이 없어서 test_X = test.drop(columns=['회원ID']) 이 작업을 하지 않는다는거와는 다른 개념입니다!
왜냐면 실제 시험에서는 test 데이터에 종속변수가 원래 없기때문에 test데이터에 종속변수 컬럼을 제거해주는 작업을 하실 필요가 없거든요.
처음에 데이터 분할할때도
X = train.drop(columns=['성별','회원ID'])
y = train['성별']
이렇게 모델학습에 사용되는 독립변수에 회원 ID를 제외하고 분석했으니 test 데이터에도 회원 ID를 제거해서 예측한거랍니다.
@@aiaiyouknow1063 아 회귀문제 영상에는 원본데이터를 train test로 직접 나눠서 test데이터에 종속변수가 들어가있었던거군요!! 답변 정말 감사합니다 선생님 합격할게요!
안녕하세요! 혹시 결측값 처리하지 않고 dummies로 정규화 해서 사용해도 될까요?
결측값은 처리해주시는 것이 좋습니다. 라벨인코딩이 아닌 get_dummies()로 원핫인코딩해서 사용하셔도됩니다만 저는 기억하기 쉽고 작업하기 쉬운 라벨인코딩으로 설명을 드린것입니다. 작업해보시고 편하신 방법으로 코딩하시면 될 것같아요.
@@aiaiyouknow1063 감사합니다! :)
화질이 잘안보이는게맞는건가요?
음… 저는 잘 확인되는데 다시 재생해보시겠어요??
교수님 질문이 있습니다!
n_estimators,max_depth 부분에서 보통 몇으로 해야하나요 ??? 수치를
제가 설명드린 수치로 우선 실습해보시고, 위아래로 수치 조절해보시는게 좋아요. 데이터에 따라 결과는
달라지거든요!
감사합니다 선생님 너무 도움 많이 되었습니다
질문이 있습니다 제가 알기로는 AUC라는 표현이 있으면 model.predict_proba 라고 알고 있는데
선지에서 확률을 구하라는 말이 없어서 model.predict를 사용하신건가요 ?
넵 맞습니당!
안녕하세요 선생님 좋은 강의 감사합니다.
혹시 만약 처음에 제공되는게 X_train=pd.read_csv("")
X_test=pd.read_csv()
y_train=pd.read_csv()
이렇게 제공되어도 다 지우고 선생님이 하신 것처럼 맨 처음 train= test= 로 진행해도 되나요?
제 경험상 시험 때 작업형 2유형은 Kdata에서 공개해주신 문제형태 대로 나올텐데요. (Train / Test 구분하여 제공)
만약 말씀주신대로 데이터가 주어졌다면 그에 맞게 코드를 작성하시는게 맞을것같아요.
교수님 혹시 스케일링은 따로 안해줘도 될까요??
하셔도 되지만 제가 작업한 대로 하셔도 문제 없으실거예요!
교수님 질문이 있습니당 만약에 회원ID가 object라면 이것도 라벨인코딩 해야하나요? 어차피 제외시키고 모델 돌릴거니까 안해도 상관없나요?
제외하실 거라면 라벨인코딩 안하셔도 됩니다.
감사히 잘보고 있습니다.
회귀편도 봤는데요. 라벨인코딩시에
회귀편에서는
df['성별'] = le.fit_transform(df[['성별']])
이런식이었는데, 시험환경에서는 이렇게 쓰면 오류를 표출하구요
분류편에서 코드 작성하신대로
df['성별'] = le.fit_transform(df['성별']) 이렇게 하면 시험환경에서 오류가 안나더라구
어떤 형태로 코드를 작성해야 하는걸까요.
제가 올려드린 회귀모델 영상에서 라벨인코딩할 때 df['brand']=le.fit_transform(df['brand']) 이런 형태로 코드를 작성해 드렸는데, 혹시 다시 확인해보시겠어요? 이 형태가 맞습니다.
@@aiaiyouknow1063 죄송합니다. 라벨인코딩이 아니고, 1유형의 Min-Max 스케일링 할때 였네요. 스케일러와 인코더로 넘겨야할 데이터의 차원이 다른가요? 스케일러는 [[ ]], 인코더는 []로 사용하면 되는걸까요?
@@Nomad-nt3ep 네 맞습니다!
혹시 테스츠 데이터 예측에서 회원ID랑 GENDER둘다 지워야하는거 아닌가요?😅
시험에서 주어지는 테스트 데이터에는 종속변수(gender)가 포함되어있지 않으므로 삭제할 필요가 없습니다.
@aiaiyouknow1063 감사합니다!!
le = LabelEncoder()
train['주구매상품'] = le.fit_transform(train['주구매상품'])
train['주구매지점']=le.fit_transform(train['주구매지점']) 이렇게 하면 test데이터에는 fit적용하면 안되는거 아닌가요? 잘몰라서 질문 드립니다..ㅠ
네 사실 엄격하게 말씀드리자면 말씀주신 부분이 맞습니다.
하지만 빅분기 시험에서는 해당 부분에 대한 별도의 제한을 두지 않기에 영상처럼 코드를 설명드렸습니다. (저 역시 실제 보기와 같은 형태로 라벨인코딩을 진행했으나 별도의 감점 요인이 없었습니다. )
제가 올려드린대로 하셔도 사실 크게 문제는 없지만 혹시나 신경이 쓰이신다면 라벨인코딩 부분을 아래와 같이 수정해서 학습해주시면 됩니다. ^^ (참고적으로 아래와 같이 라벨인코딩 했을때와 영상에서 설명드린 코드로 실행했을 때, 검증 결과는 동일했습니다.)
le.fit(train['주구매상품'])
train['주구매상품'] = le.transform(train['주구매상품'])
test['주구매상품'] = le.transform(test['주구매상품'])
le.fit(train['주구매지점'])
train['주구매지점'] = le.transform(train['주구매지점'])
test['주구매지점'] = le.transform(test['주구매지점'])
혹시 헷갈리신다면 아래의 영상을 참고해주세요!
ua-cam.com/video/WWR--wyhiAI/v-deo.html
그리고 pred1=rfc.predict(X_test) roc_auc_score에는 rfc.predict_proba(X_test)[: ,1] 로 넣어줘야 하는거 아닌가요..
@@aiaiyouknow1063 네 좋은 답변해주셔서 감사합니다 . !!
@@김재형-n7h 좋은 지적입니다!
roc_auc를 평가지표로 사용할 때는 보통 predict_proba()로 예측을 하죠.
그렇지만 샘플 문제에서 종속변수(성별)로 분류될 확률을 예측하라는 언급이 없었고, 제출 파일 예시 또한 예측 확률이 아닌 0또는 1로 분류된 결과가 안내되어 있었기에 predict()로 데이터를 예측한 것입니다.
정리하자면!
"문제에서 평가지표가 roc_auc로 나온경우 종속변수로 분류될 "확률"을 구하라는 언급이 있을 때 predict_proba()를 사용한다." 라고 보시면 될 것 같습니다.
@@aiaiyouknow1063 좋은 답변 감사합니다 !!
안녕하세요 어제부터 2유형 막 시작한 비전공 수험자인데요
아무것도 모르는 상태에서 그냥 들이박다가 영상보고 푸는 느낌? 돌아가는 과정은 살짝 감 잡은 것 같은데 궁금한게 있습니다
1. 다른 분들 예시문제 보면 x_train, y_train, x_test 보통 이렇게 3가지가 주어지던데
영상처럼 체험문제 같이 train과 test 이렇게 2가지 주어지면 풀 때 서로 어떤걸 주의하면서 풀어야하나요?
2. random state = 2024가 3500개 중에 랜덤으로 뽑을거고 뽑은 2024개를 고정하는 느낌인 것 같은데 데이터 수에 따라 정하는 값이 다를 것 같은데 기준 같은게 있는건가요?
1. 보통 시험에서는 제가 영상에서 설명드리는대로 Train 데이터와 Test 데이터가 주어지고, 작업하도록 안내될거예요. 따라서 영상에서 보여드린대로 작업하시면 무리 없이 코딩 가능하실겁니다! 사용하는 데이터에 따라 혹은 코딩 방식에 따라 코드는 차이가 있을
수 있어요.
2. 랜덤스테이트 값은 랜덤하게 수치를 가져오되 고정값(2024 등)을 넣으면 그 값을 넣을때는 동일한 랜덤값들이 추출되어 결과 성능을 고정할 수 있기에 사용되요. 즉 10을 넣을때는 그러한 랜덤값이 123을 넣을때는 그러한 랜덤값이 추출된단 이야기죠. 랜던값 추출은 내부 연산 기준으로 추출됩니다. 이때 랜덤값은 다른 정수를 넣어도 되요.
랜덤스테이트는 입력하는 수치 자체가 중요한것이 아니라 코드를 실행할때마다 추출되는 데이터가 달라져서 정확도가 바뀌는 것을 방지하기 위함이라고 이해해주심 될 것 같네요!
강의 감사합니다! 마지막에 pred2 부분이 잘 이해가 안 되어서 질문드립니다..! 지금 제가 이해한걸론 train 데이터로 훈련된 rfc 모델에 X_test 데이터를 넣으면 끝날꺼 같은데, test_X를 따로 만들어주는 이유가 무엇일까요? pred1 : train 데이터에대한 예측 값이라고 되어있는데 pred1도 X_test여서 test 데이터에 대한 예측값이 아닌가 싶은게 현재 이해 상황입니다!..
시험에서는 Train 데이터는 독립변수와 종속변수가 주어지지만 Test 데이터는 독립변수만 주어집니다. 그 이유는 Train 데이터의 일부를 학습데이터로 사용하여 모델을 학습시키고 그 모델로 예측한 결과(pred1)를 실제 데이터(y_test)와 비교하면서 성능을 평가하기 위함이죠.
train test split 함수로 나눈것은 Train 데이터를 80퍼센트는 학습으로 20퍼센트는 테스트로 나누겠다는 겁니다. 그러니 pred1은 성능평가를 위한 Train데이터의 예측값인거구요.
시험에서는 어느정도 성능이 완성된 모델을 가지고 Test 데이터를 활용하여 목표변수값을 예측해내야하므로 pred2에 예측값을 저장하여 결과를 제출하는 것입니다!
이부분에서 많이들 혼동하시는데 헷갈리시면 안대요.
@@aiaiyouknow1063 아 어떻게 보면 간단한건데 헷갈렸네요! pred1은 train 데이터로 이거저거 했던거고 pred2는 아껴두게된 test 데이터를 쓰는거네요. test란 용어에 헷갈렸던 거 같습니다 ㅎㅎ 시험포기할까 하다 영상보고 감 잡아서 연습중입니다. 감사합니다!
@@pgmwisdo no 포기! 좋은 결과 있으실거예요! 화이팅!!
안녕하세요! 영상 감사합니다 질문이 있어 댓글 남깁니다.
1. 데이터 분할할때
x = train.drop(columns=[‘성별‘,’회원id’]
y = train[‘성별‘]
이렇게만 분할 해도 점수 잘 나올까요..?
위에처럼 종속/독립으로 분할하는 변수 지정하는걸로만 여태 공부해왔는데 사용하던 코드가 아니라서 제가 잘못하고 있나 불안하네요ㅠㅠ
2. 성능 평가하는 부분은 시험에 점수로 반영되는 부분은 아닌거죵?
3. 모델 학습할때 rfc=RandomForestClassifier() 이 괄호 안에 아무것도 안적고 돌려도 괜찮을까요?
제가 딱 기본만 외워가려고 하는데 급 혼란오네요 ㅠㅠ 이렇게만 해도 점수가 나올란지요….
3가지 답변 해주시면 정말 감사하겠습니다!!!
1. 네 그렇게 하셔도 됩니다.
2. 시험에서 성능평가 지표로 주신 기준(F1-score, RMSE 등)은 저희가 최종적으로 제출한 데이터의 평가 기준으로 사용됩니다. 즉 저희가 코드에서 확인하는 것은 트레인 데이터에 대한 성능으로 대략적인 모델 성능을 확인하는 용도라고 보심되요.(테스트 데이터에 대한 종속변수가 시험에서는 주어지지 않아서 테스트 데이터에 대한 성능평가 결과는 저희가 알 수 없으니깐요!)
3. 그렇게 하셔도 됩니다. 그럴 경우 파라미터 기본 설정값으로 모델링 및 학습됩니다. 다만 성능이 아쉬운경우 영상의 설명처럼 파라미터 값을 수정하면서 결과 확인하심되요!
답변 정말 감사합니다!!!!! 시험 잘 보고오겠습니당~!!👍🏻👍🏻
@user-tr1yn3xn1m 합격하세요! 홧팅!! 😊
LabelEncoder 관련 질문 있습니다.
train['주구매지점'] = le.fit_transform(train['주구매지점'])
test['주구매지점'] = le.fit_transform(test['주구매지점'])
이렇게 하면 개별적으로 encoding이 되기 때문에 부정확한거 아닌가요?
예를 들어 train 데이터에서 '주구매지점' 내에서 '이마트':0 , '홈플러스':1, '롯데':2 로 인코딩하였는데
test 데이터에서 '주구매지점' 내 '이마트':2 , '홈플러스':0, '롯데':1 로 인코딩 될 수도 있잖아요.
그러면 같은 모델에 돌리는게 의미가 없을 것 같은데, 제가 이해를 못한건지 궁금해서 질문드립니다.
제가 알기로는
train['주구매지점'] = le.fit_transform(train['주구매지점']) 으로 인코딩에 대한 기준을 세우고
test['주구매지점'] = le.transform(test['주구매지점']) 으로 test 데이터에 그 기준을 transform 하는 걸로 알고 있습니다.
영상에서 전처리 부분 코드를 수정하여 아래와 같이 사용해주세요! (변경된 코드 영상 설명에 적어드렸습니다.)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(train['주구매상품'])
train['주구매상품'] = le.transform(train['주구매상품'])
test['주구매상품'] = le.transform(test['주구매상품'])
le.fit(train['주구매지점'])
train['주구매지점'] = le.transform(train['주구매지점'])
test['주구매지점'] = le.transform(test['주구매지점'])
저도 이렇게 알고있어요 학습데이터에 없는 테스트 데이터 때문에 에러 나는 부분은 따로 처리해주어야 하고요. 코드에 대해서는 따로 채점을 안하나보네요..
train과 test의 데이터 차이가 있으면, 두 데이터 합쳐서 fit() 한 후에 , train, test 각각 transform()하면 되지 않나요?
그렇게 하셔도 됩니다.
train['주구매지점'] = le.fit_transform(train['주구매지점'])
test['주구매지점'] = le.fit_transform(test['주구매지점'])
이런식으로 하면 새로 학습되기 때문에 굉장히 위험해요.
(train) 가 나 다 라 -> 0 1 2 3
(test) 가 나 라 -> 0 1 2
이렇게 되기때문에 train에서는 라가 3인데 test에서는 라가 2에요.
아마 선생님께서 시험때 문제 없었던 이유는 train과 test의 차이가 별로 없어서 그랬나보네요.
교수님 분류 모델일땐 random_state=2024이고 회귀 모델일땐 random_state=10으로 하셨는데, 이유가 뭔가요?? 대강 어떤 기준으로 설정해주면 될까요?
특별한 이유는 없습니다. 랜덤스테이트 값은 동일하게 랜덤값을 추출하여 동일한 성능을 얻기 위함이라 어떤 수를 쓰셔도 크게 관계는 없어요. 랜덤 스테이트 수치에 따라 랜덤으로 가져오는 데이터가 달라질 뿐이죠.
@@aiaiyouknow1063 그럼 그냥 모든 문제에서 10으로 통일해도 될까요?? 그리고 빅분기 실기 2유형은 분류, 회귀 다 랜덤포레스트로만 준비해도 될까요?.. 혹시 다른거 사용하라는 문제가 나올까요..?
@hammmmmmmmmmm 네 통일해서 사용해도 전혀 문제 없어요. 현재 기준 분류 회귀 이렇게 유형이 출제되는 상황이라 그렇게 준비하시면 작업에 무리 없을거예요. 그래도 시험 전까지 시간이 좀? 있으니 수험서나 각종 자료들 보시면서 다양한 내용들 참고해 두심 더 좋겠죠?
@@aiaiyouknow1063 네 감사합니다!!
결측치 처리할 때 train. 하면 안돼고 train['환불금액'].fillna 해야되는거아닌가요
Train 데이터에 결측값 컬럼이 하나이니 이렇게 작성해도 괜찮아요.
명목변수들을 더미변수로 처리 안하고 일반 수치형 데이터로 인코딩하면 분석에 문제가 있지 않나요?? 덧붙이자면 a지점 b지점이 각각 1과 2로 인코딩 했을때 a지점
넵 문제 없습니당
모델이 트리계열이라 상관없어요
널값 채울때!
train['환불금액'].fillna(train.groupby('성별')['환불금액'].transform('mean'), inplace=True)
test['환불금액'].fillna(test['환불금액'].mode()[0], inplace=True)
이런식으로 train에서는 정답값 그룹화해서 채워넣고
test는 정답값이 없으니 그냥 최빈값으로 채워 넣고
이런식으로 해도 되나요??? auc값은 대폭 상승하긴 합니다.
다만 두 세트 널값 채우는 방식이 달라 틀리게 할거 같아 궁금하여 질문합니다!!!!
트레인, 테스트 대체 값을 최빈값으로 할지 평균으로 할지 동일하게 맞춰주시는게 적합할거같네요.
@@aiaiyouknow1063 헉 바로 답변을!! 감사합니다!!
교수님 혹시 3유형 지금 준비중이신가요?
3유형 영상 작년 12월에 올려드렸어요!
@@aiaiyouknow1063 감사합니다! :)
test데이터 결측치를 test데이터의 최빈값으로 처리하면 data leakage 아닌가용? 빅분기 시험에서는 상관 없는건가요?
시험에서 트레인, 테스트 데이터에 결측값이 있는 경우 모두 처리(대체 혹은 삭제)를 해주어야 합니다. 대체할 경우 최빈값이 자주 사용되긴 하는데, 이는 분석가의 판단에 의해 결정됩니다. 제 경험상 영상에서 설명드린 순서대로 작업할 경우 시험에서 문제 없을거예요!
테스터 데이터값의 통계정보를 이용하면 data leakage가 되지 않냐는 질문이었어요 ㅎㅎ 경진대회 참여하다가 문제된적이 있어서요 빅분기시험은 상관 없나보네요!
네 맞습니당
train 최빈값으로 동일하게 결측치 처리하는게 맞긴하죠
혹시 라벨인코딩하실때 트레인과 테스트전부 fit_trasnfrom을 하셨는데 그러면 테스트에는 트레인라벨이 적용안되고 초기화되지않나요
만약 트레인에서fit한 라벨을 테스트에다가 transform을 하게되면 오류가뜹니다 같지않는 데이터를 가지고있나봅니다. 혹시 그럴땐 어떡하나요?
라벨인코딩이 문자열 데이터를 수치형으로 바꿔주는 것이고, 데이터를 분석하고자 하는 경우 컬럼 데이터에 문자열 데이터가 포함된 경우 연산이 어렵기 때문에 분석에 사용하고자하는 컬럼은 트레인 데이터와 테스트 데이터에 모두 라벨인코딩 처리를 전처리작업으로 해줍니다. 그때 사용되는 함수가 fit_transform()이구요. 어떠한 오류인지는 제가 확인이 되지 않아 정확히 모르겠지만 영상 설명에 전체 코드 넣어두었으니 한번 참고해보시면 좋을것같습니다.
네네 문자열을 fit_trasnfrom으로 바꿔주는것까지 이해했습니다 근데 제가알기로는
x['주구매상품'] = le.fit_transform(x['주구매상품'])
x['주구매지점'] = le.fit_transform(x['주구매지점'])
#영상코드
test['주구매상품'] = le.fit_transform(test_x['주구매상품'])
test['주구매지점'] = le.fit_transform(test_x['주구매지점'])
#제가 알던 코드
test['주구매상품'] = le.transform(test_x['주구매상품'])
test['주구매지점'] = le.transform(test_x['주구매지점'])
이렇게 훈련에 썻던 똑같은 라벨을 적용하기위해서 test에는 train에적용된 라벨을 적용해야하는걸로 알고있거든요
영상코드대로하면 라벨인코딩이 초기화가되면서 train과 test에 라벨인코딩방식이 같을수도 있고 다를수도 있을거같아서요
@user-sj4zo1xp8h 트레인은 트레인대로 테스트는 테스트 데이터 대로 라벨인코딩 적용해주셔도 시험에서 큰 문제 없을겁니다. ^^ 말씀주신대로 작업할 경우 데이터 사이즈도 맞지 않고, 테스트 데이터는 라벨인코딩이 되지 않은 상태이기 때문에 오류가 날거예요.
@@aiaiyouknow1063 그럼 만약에
새로 라벨인코딩을 따로하면 똑같은것은 똑같은 라벨이 적용될수도있지만 만약 데이터데이터 값의 순서가 다르고 라벨인코딩이 똑같은 문자여도 서로다르게 될까봐 물어봤습니다. 그럴가능성은 없겠죠?
@user-sj4zo1xp8h 제가 영상에서 보여드린것과 같은 순서대로 작업하시면 문제 없을거예요!
안녕하세요 혹시 데이터 분할시 X에 성별하고 회원 ID를 삭제하셨는데 성별만 삭제해도 괜찮을까요?
네 괜찮아요~
@@aiaiyouknow1063 감사합니다 그럼 혹시 #테스트 데이터 예측 부분은 생략해도 되는건가요?
그렇게 하셨다면 테스트 데이터에서 회원 ID 삭제하는 부분은 제외하고 코드 작성하심 되겠죠?
@@aiaiyouknow1063 제외하고 코드 작성하였더니 test_X 가 정의되어있지않다고 에러뜨네요 ㅜ
회원 ID 삭제 부분 제외하셨으면 predict() 함수 안에 test를 넣으셔야되요!
2곳 틀렸어요 수정하세요 잘못된 정보인데
책 구매하고 잘보고있습니다 교수님. 혹시 마지막으로 회귀모델및 주의사항 영상도 하나 올려 주실 수 있을까요?
꺗 독자님이셨군요. 회귀모델 영상도 곧 업로드 예정입니다! 시험이 얼마 안남아서 서둘러 보려구요!