본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 7주차] 캐글 타이타닉,

by aimaimee 2023. 4. 22.

[221101] 0501번 실습파일 : 캐글 submit predictions, subplots, 정규화 / 0502번 실습파일 : 지도학습 모델, binary encoding, 성별 피처 엔지니어링, 지니 불순도, 로그, 엔트로피 / JD : 그로스해킹

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

221101

📌캐글
filter - getting started, playground
house price 회귀
bag of word 자연어


✅ 0501번 실습 파일

index_col은 PassengerId를 인덱스로 삼고 싶을 때
Q. train.csv 와 test.csv 파일의 차이점은 무엇일까요?

  • survivied 컬럼 유무
  • test는 passengerId가 892번부터 시작한다.
  • train데이터의 shape는 891
  • 컬럼수는 train은 11개, test는 10개
  • test에 비해 train의 행의 갯수가 2배 이상 많다.

Q. 왜 survived는 train에만 있을까?

  • survived는 예측해야 할 대상이기 때문에
  • set(train.columns) - set(test.columns)

캐글 데이터 소개

  • gender_submissions는 submit predictions하는 제출 파일

Age

  • 0.5이면 1살 미만의 개월. 6개월 영아

Q. 왜 당뇨병 데이터셋에 비해 타이타닉 데이터셋이 더 난이도가 있는 데이터일까?

  • 전처리 할 것이 많다.
  • 결측치가 많다.

Q. 전처리 할 데이터가 많다?

  • 결측치, 문자데이터가 있고, 당뇨병 데이터에 비해 크기도 좀 더 크다.

히스토그램

  • 생존이 1인데, 0이 더 많다.
  • 3등급이 훨씬 많다.
  • 나이의 분포는 0이 많다. 어린 아이들이 있다. 나이가 많은 사람들은 많이 없다. 주로 2-30대

결측치

  • subplots : https://www.youtube.com/watch?v=ZTRKojTLE8M
  • 히트맵과 barplot도 함께 그려주고 싶다면, fig, axes 의 nrows, ncols 추가
  • ax=axes[0,0]과 같이 행, 열 모두 입력
    정답값 빈도
  • value_counts()
  • countplot으로 시각화

전처리

  • Normalization 수치 데이터를 정규화 ex) 부동산, house price 데이터
  • 정규화는 숫자 스케일의 차이가 클 때 값을 정규분포로 만들어주거나 스케일 값을 변경해주는 것
  • Outliers : 너무 비싼 요금을 주고 탄 사람, 이상치를 제거하거나 대체
  • Imputation : 결측치를 다른 값으로 대체
  • Encoding : 호칭, 탑승지의 윛, 문자 데이터를 수치화, 너무 범위가 큰 수치 데이터를 구간화해서 인코딩

캐글 점수

  • (실제값 == 예측값) => 평균(올바르게 예측한 샘플 개수 / 전체 샘플 개수) =>accuracy
  • TP + TN / (TP + TN + FP + FN) = Accuracy
  • (y_test == y_predict).mean()

Q. Accuracy가 1인 것은?

  • 백점, 정답지 제출

✅ 0502 실습 파일

labe값 빈도수

  • sns.countplot(data=train, x="Survived", hue="Sex")

결측치

  • train : Age, Cabin, Embarked에 발생
  • test : Age, Fare, Cabin 결측치 발생

지도학습 모델

  • X_train 기출문제, y_train 기출문제의 정답, X_test 실전문제, y_test 실전문제의 정답

학습, 예측

  • object인 것은 사용할 수 없다.
  • 수치데이터만 가져온 이유? 머신러닝 내부에서 연산을 할 수 없기 때문
  • 성별이 object 타입이면 수치 데이터 형태로 바꿔줄 수 있다.
  • 수치 데이터만 가져온다. train.select_dtypes(include="number").columns
  • binary encoding : 성별은 중요한 역할을 하는데 문자로 되어 있으면 머신러닝 내부에서 연산을 할 수 없기 때문에 수치 데이터로 변환하는 인코딩 작업을 수행
  • 성별 컬럼 피처 엔지니어링 : train 뿐만 아니라 test도 같이 해주어야 한다.
  • train["Gender"] = train["Sex"] == "female"

데이터셋 만들기

  • X_train = train[feature_names].fillna(0)
  • sum()을 하고, 전체에서 결측치가 있냐 없냐를 보기 위해 한 번 더 sum()
  • X_test와 y_train도 결측치를 채워준다.
  • y_train은 survived로 정답값이기 때문에 결측치가 없어서 채울 필요도 없다
    머신러닝 알고리즘 가져와서 학습, 예측
  • y_test가 없다면 cross_val_predict를 사용하거나 hold-out-validation을 사용해서 구할 수 있다.
  • hold-out-validation(valid가 한 조각인 경우)
  • cross_validation(valid가 여러 조각)

캐글에 제출 : 0.76555 -> 0.70095

  • Q. 하루에 10번만 제출할 수 있는데 그 이유는?
  • 서버무리, 점수조작, 찍어 맞출 수도 있다.
  • 어뷰징 때문에 API 등도 제공하고 있기 때문에 너무 많이 제출하면 어뷰징(잘못된 사용)
  • 캐글에는 상금, 채용, 상을 걸고 하는 대회에 어뷰징이 있을 수 있기 때문에 하루 제출 횟수를 제한한다. 한국 데이콘도 그렇다.

지니 불순도

  • 불순한 것이 얼마나 섞여 있는가
  • CART 알고리즘
  • 불순도 최솟값 0 == 완전 순수하다.

log

  • 2진, 10진 로그 등에 따라 그래프가 달라질 수 있다.
  • Q. 이진로그(2), 자연로그(e), 상용로그(10)의 공통점?
  • 🔥중요! : (1,0)을 지난다.
  • x는 음수를 가지지 않으며, 0보다 큰 값만 있다.
  • x가 1보다 작을 때, 마이너스 무한대로 수렴한다.

엔트로피

  • 2진 로그를 사용
  • 마이너스 값이 붙는다. : 음의 로그
  • 정보 획득량은 정보 이론의 엔트로피 개념에 근거를 두고 있다.
  • 엔트로피 0은 다른 값이 섞여 있지 않음을 의미한다.
  • 클래스가 많아지면 로그의 밑이 달라지는 것이 아니고 엔트로피 최대값이 다른다
  • 클래스 : 당뇨병 이다 아니다 - 2진 분류 / 생존여부 - 2진분류 / 고객센터 문의 7개 - 7개로 분류 / 쇼핑 카테고리 19개 - 19개로 분류
  • 캐글 SFCrime : accuracy 말고 logloss를 사용한다. 지금 하는 것과 거의 비슷하지만 -1/N로 나누는 차이
  • https://www.kaggle.com/code/yannisp/sf-crime-analysis-prediction 멀티클래스 분류의 예제
  • https://dacon.io/competitions/official/235747/overview/description 클라스가 여러개인 예제
  • 클래스를 예측할 때, True False로 예측하기도 하지만 멀티클래스일 때는 특정 클래스의 확률을 예측하기도 한다.
  • 그래서 예시의 측정공식은 logloss를 사용
  • DecisionTree에서 사용하는 엔트로피는 섀넌 엔트로피. 섀넌 엔트로피에서는 이진로그를 사용한다.

Q. 엔트로피와 지니불순도를 사용하는 목적?

  • 값이 얼마나 섞여 있는지를 보기 위해서.
  • 분류의 분할에 대한 품질을 평가하고 싶을 때 사용

✅ 0503 실습파일

파생변수 만들기

train["FamilySize"] = train["Parch"] + train["SibSp"] + 1
train["Gender"] = train["Sex"] == "female"
train["Title"] = train["Name"].map(lambda x : x.split(".")[0].split(",")[1].strip())


r2_score : https://ko.wikipedia.org/wiki/%EA%B2%B0%EC%A0%95%EA%B3%84%EC%88%98


📌JD

Growth Data Analyst의 Growth는 어떤 의미일까?
그로스 해킹 : 위키 문서 https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A1%9C%EC%8A%A4_%ED%95%B4%ED%82%B9

  • 프로덕트와 마켓 핏을 찾는 과정
  • amplitude 도구
    광고 비용을 써서 끌어올리는데 효과가 있게 하기 위해 데이터 분석과 협업
    AB테스트, 퍼널 분석
    ROAS : 광고 대비 매출액 : (return on ad spend)

conda update -c conda-forge seaborn


TIL

사실(Fact) : 캐글 타이타닉 데이터를 가지고 accuracy를 높이기 위해 데이터를 체크해보았다. 결정 트리를 그리는 과정에서 criterion에 집중해 엔트로피와 지니 불순도를 공부했다.
느낌(Feeling) : 어제 불순도 관련해서 공부하다가, 수식을 보고 이해를 못했다. 그냥 개념만 읽어보고 넘어갔는데, 오늘 계산하는 과정까지 자세히 배울 수 있어서 좋았다.
교훈(Finding) : 질문을 통해 배우는 것도 많다. 항상 궁금함을 가지고 배우자!

댓글