오늘은 어제 수업에서 진행했던 간단한 모델 구성의 남은 파트를 이어서 마무리 한 이후
캐글이라는 사이트에서 진행하는 대회에 나가서 최소 동메달정도 받을 수 있도록 머신러닝 모델을 만들어보는 실습을 시작했다.
머신러닝 전체 플로우 진행
특성 데이터 획득
어제 마지막으로는 train | test 피처 데이터를 구성하는 함수 만들기가 과제였다.

먼저 어제 진행한 함수는 데이터 하나의 값을 가져오는 내용이었다. 그래서 한 폴더에 있는 모든 파일의 내용을 가져오는 함수를 따로 설정해야 한다.
이를 corpus_preprocessing 함수로 정의하고, 데이터를 한번 담아줄 그릇을 만들어야 한다. 4번 코드
features 라는 리스트에 각 파일들을 for 문을 이용해서 순회하면서 파일을 모두 담아준다.
이 떄 그저 파일을 리스트에 담기만 하는게 아니라 이전에 사용했던 전처리 함수 get_feature 함수를 사용해서
전처리 한 후 append로 features에 하나씩 넣어준다.

그 이후 전체 결과를 담은 그릇 features 리스트, 그리고 개별 데이터의 정답인 종속변수를 담은 리스트 labels 리스트도 만들어준다.
features 에 했던 내용을 lables에도 똑같이 해준다,
그 이후 return 딕셔너리로 피처 라벨과 정답 값을 설정해준다,

features 키를 가진 값 편차와 labels 키를 가진 값 국가코드로 데이터를 뽑아왔다.
데이터 분석-EDA
- 머신러닝에서는 본 파트는 생략됨
- 제한적으로 사용
- 명제 (논문에서 차용한 것 가정)
- 알파벳의 빈도 차이가 국가별로 존재한다
- 국가별로 알파벳 문자를 사용하는 빈도가 상이하다
- 통상적으로는 모델 구축시 피처엔지니어링에서 EDA를 활용

시각화 위한 라이브러리 불러오고 뽑아온 데이터를 dataframe으로 만들어줄거다.
현재 데이터의 내용은 각 파일별로 a-z의 알파벳의 빈도수를 담은 데이터 feature 과 국가코드를 담은 labels 데이터다.
파생변수를 부여해서 국가코드를 추가해준다.

데이터프레임으로 설정했다.

피벗테이블을 이용해서 국가별로 알파벳이 나오는 빈도수를 묶어줬다.
평균값으로 국가별 문자열 빈도를 표현한다.
이제 시각화




데이터를 보면 각 나라별로 알파벳이나오는 빈도가 조금씩 다른것을 알 수 있다.
하지만 그 추세는 비슷하다.
이걸 우리가 직접 저 나라에 가서 대화하면서 알기는 참 쉽지 않을것이다 그치?

히스토그램을 사용해서 각 문자별 분표를 한 눈에 볼 수 있게 표현할것이다.
각 알파벳별로 차트를 만들고 국가별, 알파벳별로 for문을 돌려서 차트를 한개씩 만든다,
그 밖에는 시각화 코드


이런식으로 차트가 나온다.
차트의 x축을 보면 단위가 다른것을 알 수있는데 그래서 a의 차트에 영어와 프랑스어가 엄청 좁은거다.
비율상으로 a가 tl이 훨씬 많아서, frequency는 횟수이다. 1 또는 2 또는 3이니 5개의 데이터중 저 값에 있는 개수가 몇개라는 뜻이다.
- 결론
- 알파벳 문자의 빈도는 국가별 언어를 구분하는데 도움이 된다
- 단, 인간의 지성으로는 구분 어렵다( a-z 동시에 두고 비교하는 행위 자체가 어렵다 )
- AI를 이용하여 (여기서는 머신러닝)을 이용하여 학습을 통해 잘 구분하도록 파라미터를 미세조정해야한다.
모델 구축 - 머신러닝 - 베이스라인
- 절차
- 베이스라인 구축 -> 알고리즘 선정 -> 피처 엔지니어링(사전에 구성 가능 )-> 학습 -> 예측 -> 평가 -> 최적화 -> 학습 -> 평가(목표치 도달) -> 모델 덤프
- 베이스라인
- 프로토타입 : 기본 모델을 이용하여 절차를 끝까지 한번 가봄
- 알고리즘 선정 -> 학습 -> 예측 -> 평가 -> 종료(모델 덤프 -> 서비스)
- 해당 데이터의 기본 성능 확인, 어느정도 모델이 성과를 내는지 가늠, 서비스 형태 미리 프리뷰 가능
- 프로토타입 : 기본 모델을 이용하여 절차를 끝까지 한번 가봄
- 대표 패키지
- scikit-learn (사이킷런)
- https://scikit-learn.org/stable/
- Machine Learning in Python
- 구성
- 알고리즘
- 분류, 회귀, 군집, 차원축소
- 도구
- 모델선택, 최적화, 학습도구, 평가도구
- 전처리
- 스케일링, 피처 선택
- 알고리즘
- scikit-learn (사이킷런)
모델 구축 시작

라이브러리 불러온다, 코랩에는 기본으로 있다.


현재 정확도가 100프로다, 이는 예측모델에서 오히려 과적합으로 데이터가 적다는 뜻이다. 100프로는 없다,
시스템 구축 - 모델서빙 - 파파고 언어감지(유사품)
- gradio를 이용하여 시뮬레이션
모델 덤프
- 딥러닝 프레임웍(텐서플로우/케라스, 파이토치, ...), LLM 계열들은 자체적으로 덤프 함수를 가지고 있음

모델 덤프로 모델 파일 만들어준다, 그리고 검사
시뮬레이션(gradio) or 데모(fastapi)

판별 함수를 만들어준다, gradio를 이용해서 api도 제공받고 또한 시각화까지 바로 진행된다,
코드 잘 봐라, 이게 머신러닝의 아주아주 기초이다. 우리도 달달외워야된다.
코드를 실행하면 이런 모델이 나온다. 영상 참고
머신러닝 지도학습 분류 캐글 playground 경쟁분야
목표
- 머신러닝 절차 심화
- 각 절차별로 심도있게 진행
- 각 파트에 대한 별도 내용은 별도 노트로 전개
- 캐글상 종료 대회를 진행, 입상(금,은,동) 목
연구목표 - 요구사항분석
- 배경
- 캐글 대회에 제출된 문제 (플레이그라운드레벨)
- 범주형 데이터를 맞추는 (이진 분류) 대회
- 데이터는 마스킹되어 있음 -> 어떤 데이터인지는 숨겨져있음 (고양이 판별 대회)
- 피처 : 이진형, 명목형, 순서형, 시간형
- 평가
- predict_proba() 사용 => 예측확률 0.5 이상이면 1, 아니면 0으로 판단함
- sample_submission.csv에 예측값을 세팅하여 제출 -> 랭킹 노출됨 -> 모델의 정확도 겨루는 대회
데이터 획득
- Q1 > train.csv : 피처 + 정답
- Q1 > test.csv : 피처
- test.csv를 예측하여 그 정답은 sample_submission.csv에 세팅

라이브러리 불러온 후 csv 파일 먼저 불러온다,

훈련데이터의 모습

캐글에서 제공하는 데이터는 기본적으로 마스킹이 되어서 어떤 데이터인지 확실히 파악이 어렵다고 한다, 실제보다 더 파악 안되게 만들어서 대회의 의의를 더 제공한다.
추측하는 바를 먼저 정리한다.


각 피처의 여러 정보를 담은 피처 요약표를 만들 예정이다, 이를 위해서 필요한 정보를 먼저 찾아본다.
먼저 결측 개수이다, 결측은 isna() , isnull()로 찾을 수 있고 현 데이터에는 결측치는 없다.

다음으로 각 컬럼마다 가지고 있는 고유값의 수를 파악한다,
다른 컬럼은 괜찮은데 nom_5~9 컬럼은 좀 힘들어보인다,
전체 데이터 30만개 중 쟤들만 따지면 15000개 정도 되니까 저들을 데이터로 볼 지, 결측으로 보고 배제할지에 대한 선택을 해야 한다.

피처 요약표 최종본이다
데이터를 파악할 때 필요한 정보들을 미리 함수로 정의해둔다.

- 피처 요약표를 이용하여 데이터의 특징 빠르게 파악 가능
- 해당 함수는 다른 데이터에서도 적용 가능
피처 엔지니어링 전략 수립
1. bin

bin은 각각 고유값이 2개니까 인코딩을 통해서 문자열을 대체해준다.
2. nom_0~4

이러한 값들은 인코딩 시에 원핫 인코딩으로 보통 처리한다고 한다,
구분용으로 많이 사용됨.
3. nom_5~9

제거할까? 살릴까? 제거할 시 깔끔하긴 하지만 정보 손실을 유발할 수 있다,
고로 우린 수치화한 후 압축할 예정이다.
4. ord_

ord의 경우에는 느낌이 딱 봐도 음 레벨 등급 등등같다.
그래서 데이터화 할 가능성이 보이기 때문에 순서를 부여할 예정이다, 내제적으로는 선형모델을 가진 데이터로 볼 수 있다.
오늘의 수업은 여기까지