ASAC-SK플래닛 T아카데미 데이터 엔지니어

25.12.03 40일차 [ 머신러닝 전체 플로우 진행, 간단한 모델 구성 | 머신러닝 지도학습 분류 캐글 playground 경쟁분야]

Datadesigner 2025. 12. 3. 17:10

오늘은 어제 수업에서 진행했던 간단한 모델 구성의 남은 파트를 이어서 마무리 한 이후

 

캐글이라는 사이트에서 진행하는 대회에 나가서 최소 동메달정도 받을 수 있도록 머신러닝 모델을 만들어보는 실습을 시작했다.

 


머신러닝 전체 플로우 진행

 

특성 데이터 획득

 

어제 마지막으로는 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 (사이킷런)
    • 구성
      • 알고리즘
        • 분류, 회귀, 군집, 차원축소
      • 도구
        • 모델선택, 최적화, 학습도구, 평가도구
      • 전처리
        • 스케일링, 피처 선택

모델 구축 시작

 

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

현재 정확도가 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의 경우에는 느낌이 딱 봐도 음 레벨 등급 등등같다.

그래서 데이터화 할 가능성이 보이기 때문에 순서를 부여할 예정이다, 내제적으로는 선형모델을 가진 데이터로 볼 수 있다.

 

 

오늘의 수업은 여기까지