작성
·
152
·
수정됨
0
(1) Feature scaling 실습 강의를 듣다가 궁금한 점이 있어 질문드립니다! 타이타닉 자료에서 나이에 대한 결측치는 중간값으로 처리하고, Embarked의 경우 drop을 하는 걸로 알려주셨는데요 🙂 원래 없는 값인데 중간 값으로 결측치를 채워주는 것도 그렇구 다른 FEATURE값이 있는데 결측치가 있는 row라고 지워버리는 것도 그렇고 결측치가 주는 영향이 그만큼 크기 때문인가요?? 값이 비어있는 것보다는 평균으로라도 채워놓는 게 좋은 건지, 다른 feature 정보가 있더라도 결측치가 있는 row는 지우는 게 좋은 건지 feature engineering에 대해 제대로 이해하지 못한 것 같아 여쭤봅니다!
(2) SKEW된 FARE에 log를 취해주셨는데요! 사실 그래프만 보면 parch도 sibsb도 한 쪽으로 쏠려있고 한 쪽이 많은 느낌인데 왜 fare만 skew로 log를 취해주신 걸까요?
(3) 교재에서는 train_test_split 부분을 이렇게 해주셨는데요!
X_train = df_titanic[:700]
X_test = df_titanic[700:]
y_train = X_train.pop('Survived')
y_test = X_test.pop('Survived')
X_train, X_test에서 survived 부분을 안 빼줘도 되는 건가요?? 늘 감사합니다!!
답변 1
0
나이와 같은 연속적인 수치 데이터에서 결측치를 중간값으로 대체하는 것은 통계적으로 이상치의 영향을 줄이면서 전체 데이터의 분포를 유지하는 데 도움이 됩니다.
또한 나이는 생존 여부 판단에 중요한 변수일 수 있기 때문에, 단순히 이 값을 제거하기보다는 적절한 추정값으로 채우는 것이 모델의 성능을 유지하는 데 도움이 될 수 있습니다.
Embarked
는 두개 밖에 결측치가 없으므로 전체 데이터셋에 미치는 영향이 크지 않아 제거해도 되는 경우가 많습니다.
Fare
의 경우 값의 범위가 넓으므로 로그 변환은 큰 값의 영향을 줄이고, 모델이 데이터를 더 잘 이해하도록 도움을 줍니다. 그런데 Parch
(부모와 자녀의 수)나 SibSp
(형제, 배우자의 수) 같은 다른 변수들도 비슷하게 치우친 분포를 가질 수 있으나 이러한 변수들은 원래부터 정수 값을 가지며, 대부분의 값이 0 또는 매우 낮은 숫자로 구성되어 있습니다. 이러한 경우, 로그 변환을 적용하면 많은 값들이 -inf
(음의 무한대)로 변환되거나 변환 후의 효과가 미미합니다.
4. pop
메소드를 사용하면 X_train
과 X_test
에서는 Survived
가 제거되며, 동시에 y_train
과 y_test
에는 Survived
의 값이 저장됩니다. 실제로 Jupyter notebook 에서 실제로 실행해 보세요.
감사합니다.