[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) : 질문을 통해 배우는 것도 많다. 항상 궁금함을 가지고 배우자!
댓글