기타/통계, 머신러닝

250702_머신러닝(머신러닝이란, 머신러닝을 위한 전처리과정)

baektree 2025. 7. 2. 21:07

요약/나만의 인사이트

  • 머신러닝도 결국 8할은 전처리이다. 잘 정돈된 데이터일수록 모델링을 효과적으로 할 수 있다.
  • [통계] 내 말로 바꾸어 적어보기(출력)
    • 통계의 종류
      • 기술 통계
        • 데이터를 요약하고 해석하는 통계
      • 추론 통계
        • 표본을 통해 모집단을 추론하고 가설을 검정하는 통계
    • 변수의 종류
      • 이산변수(discrete variable)
        • 딱딱 떨어지는 수치형 변수
        • ex 횟수, 주사위 눈
      • 연속변수(continous variable)
        • 값이 연속되는 수치형 변수
        • ex 시간, 확률, 몸무게
    • 추론 통계는 크게 2가지로 구분된다.
      1. 추론
        1. 표본을 통해 모집단을 추정
        2. 주요 개념
          1. 신뢰구간
            • 표본을 통해 정확히 딱 떨어지는 모수(모집의 통계량)을 추정하기 어렵기 때문에 구간으로 추정한다.
          2. 정규분포
            • 표본을 반복 추출할 경우 정규분포를 따른다. 이에 모집단도 정규분포를 따른다고 추정한다.
      2. 가설검정
        1. 우연히 일어난건지, 아닌지 검정한다.
        2. 주요 개념
          1. z 점수
            • 평균에서 얼마나 떨어져 있는지 표준편차 단위로 나타낸 값
          2. p-value
            • 귀무가설이 참이라고 가정했을 때 우연히 발생할 확률
    • 표준편차 vs 표준오차 vs 표본오차
      • 표준편차 : 값이 평균으로부터 얼마나 떨어져 있는지
      • 표준오차(SE) : 표본을 여러번 뽑았을 때 표본 평균들의 퍼짐 정도
      • 표본오차 : 표본평균과 모집단평균의 차이, 표본오차는 정규분포를 따른다.
    • 신뢰구간과 가설검정
      • 신뢰구간은 모수가 포함될 가능성이 높은 구간
      • 95% 신뢰한다. = 내가 만든 신뢰구간에 모집단 평균이 들어갈 확률이 95%이다.
      • z분포 : 평균이 0이고 표준편차가 1인 정규분포
      가설검정
      • 우연인가 아닌지 검정
      • p-value : 귀무가설이 참이라는 가정하에 우연히 나올 확률, 적을수록 좋음. 우연히 나올 확률이 적어서 실험결과 차이가 있다는 뜻이니까.
      • 양측검정(차이가 있다.) 단측검증(한쪽이 더 크다.) 의 2가지 검정방법이 있음.
      • 검정을 하면 1종오류가 증가한다. (1종 오류: 차이가 없는데 있다고 검정)
      • p-value가 0.05(유의수준)보다 낮으면 귀무가설 기각, 통계적으로 유의미하다.
    • 신뢰구간
    • 수치형 변수를 위한 가설검정 방법
      • 데이터가 정규분포다? → 모수적 검정
      • 정규분포를 가정하기 어렵다? → 비모수적 검정
      종류 단일집단 평균비교 두집단 평균비교 같은 집단의 두 시점 비교 세 집단 이상 평균 비교
      예시 우리 제품 사용자의 평균 만족도가 70점과 같은가 광고 A와 B를 본 그룹의 평균 매출이 다른가? 치료전후 체중이 달라졌나? 세가지 학습법의 평균 점수 차이가 있나?
      검정(정규분포 ㄱ자정 하에) 1표본 T검정 독립표본 T검정 대응표본 T검정 ANOVA
    • 이 집단(또는 두개의 집단)의 평균/중앙값에 유의미한 차이가 있을까?
    • 범주형 변수를 위한 가설검정 방법종류 한 집단에서 비율이 특정 값과 같은지 두개 이상의 범주형 변수의 관계 두 집단의 비율 비교 짝지어진 범주형 데이터 비교
      예시 우리 사이트 사용자 중 60%가 구매했다고 할 수 있나? 성별과 구매 여부과 관련 있나? A그룹과 B그룹의 구매 비율이 다를까? 치료전/후 같은 사람이 상태가 달라졌나?
      검정 카이제곱 적합성 검정 카이제곱 독립성 검정 / 피셔의 정확검정 두 집단 비율 Z-검정 / 피셔의 정확검정 등 맥네마 검정 등
    • 범주들의 비율에 유의미한 차이가 있나? 몇 개의 그룹에 속하는가?
    • 검정을 선택할 때 질문해야 하는 리스트
      1. 어떤 질문에 답하고 싶은가?
      2. 몇 개의 그룹인가?
      3. 독립인가 대응인가?
      4. 정규분포를 가정하는가?
    • Z-분포
      • 평균이 0 표준편차가 1인 정규 분포
      • 정규분포를 표준화(Standardization)해서 쓰는 것 - 공통 잣대로 바꾸는과정
      • 정규분포 모양을 가진다.
      • z분포 테이블표로 확률을 바로 찾을 수 있다.
      • 서로 다른 단위를 통일해서 비교할 수 있다.
      • 표본평균이 얼마나 극단적인 값인지 z점수로 판단할 수 있다.

  • x 관측값
  • μ 모집단 평균
  • σ 모집단 표준편차

모수검정과 비모수검정

  • 모수검정 (Parametric)
    • 데이터가 어떤 분포를 따른다고 가정하고 검정 (보통 정규분포)
    • 수치형/연속형 데이터
    • T검정, ANOVA
  • 비모수검정 (Non-Parametric)
    • 분포 가정 없이 검정
    • 순위형/범주형도 가능
    • 맨-휘트니

 

 

표준오차 더 나아가기

표준편차(σ): 데이터 자체의 퍼짐 정도 개별 점수의 불안정성“한 사람 한사람 점수의 변동”

  • “개별 데이터들이 평균에서 얼마나 흩어져 있는가?”
  • 표준오차(SE): 표본평균의 퍼짐 정도 평균 자체의 불안정성“같은 실험을 여러번 반복하면 표본평균도 바뀌는데 그 표본평균들의 표준편차”
    • “표본평균이 모집단 평균 주위에서 얼마나 흔들리나?”
      • [머신러닝] 내 말로 바꾸어 적어보기(출력) 1️⃣ 머신러닝이란?
        • 머신러닝이란?
          • 기계가 스스로 데이터를 학습해 패턴을 찾아내고 예측이나 분류를 수행하는 기술
        • 인공지능(지능작업 기계수행) Ↄ 머신러닝(학습에 초점) Ↄ 딥러닝(인공신경망)
          • 머신러닝 중에서 학습하는 것과 학습하지 않는 것
          • 딥러닝 중에서 인공신경망 있는 것과 없는 것
        • 머신러닝 활용예시 - 마케팅
          • 고객 세분화(Customer Segmentation) - 고객데이터를 기반으로 인구통계학적 정보, 구매이력, 선호 카테고리 등을 고려하여 유사한 행동양식을 보이는 집단으로 군집화 EX 2O대 여성 , 스트릿 패션 좋아함, 서울에 거주
          • 페르소나(Persona) - 그룹을 대표하는 가상 인물을 설정해 ‘우리 고객은 이런 특징을 가진 사람이야’라고 구체적으로 이해
          • 고객 생애 가치(Life Time Value) - 한 명의 고객이 생애동안 우리 회사에 얼마나 많은 수익을 가져다줄지 예상
        • 기존통계 vs 머신러닝
          • 기존통계는 이런 관계가 나타났는가에 집중
          • 머신러닝은 예측하는것에 집중
        • 머신러닝의 종류
          • 지도학습(Supervised) - 레이블(답)을 주고 학습시키는 것
            • 분류: 어느 그룹에 속할지 결정
            • 회귀: 숫자로 된 결과를 예측
          • 비지도학습(Unupervised) - 레이블(답)을 주지 않고 학습시키는 것
            • 군집화: 성향이 비슷한 사람이나 사물을 자동으로 묶음
            • 차원 축소: 데이터의 특성(변수)가 너무 많아 핵심 정보만 남기고 압축
          • 강화학습 - 에이전트(player)가 환경과 상호작용하며 보상을 최대화하도록 학습
        • 머신러닝 모델링 프로세스
          1. 수집
          2. 전처리
          3. 모델링
          4. 성능평가
          5. 최적화
          6. 배포
      • [머신러닝] 내 말로 바꾸어 적어보기(출력) 2️⃣ 데이터 전처리
        • 데이터 전처리
          • raw데이터에서 불필요하거나 손실한 부분을 처리하는 것
          • 데이터 분석, 모델링을 효과적으로 하기 위한 전과정이라 할 수 있음
        • 전처리 종류
          • 결측치 처리
            • 행 또는 컬럼 삭제
            • 대체 (to 평균, 중앙값, 최빈값, 예측모델 예측값)
          • 이상치 탐지 및 제거
            • 통계적 기법(3σ Rule) - 데이터가 정규분포를 따른다고 가정, 평균에서 +-3σ 범위를 벗어나면 이상치로 간주
            • 박스플롯 - ‘Q1 - 1.5×IQR’, ‘Q3 + 1.5×IQR’를 벗어나는 데이터를 이상치로 간주
              • 박스플롯 그림으로 이해하기데이터의 분포와 이상치를 한눈에 보여주는 그래프다.🤩 Q2: 2사분위수(50%) 중앙값🤩 IQR (Interquartile Range) : Q3 - Q1 LIKE 두 값 사이 거리(범위)
                                이상치
                                  x
                                  
                                  │
                Q3 + 1.5×IQR ─────┤──────── Upper Bound (위 경계)
                                  │
                         ┌─────────────┐
                         │             │
                         │   Box       │
                         │             │
                         └─────────────┘
                Q1 - 1.5×IQR ─────┤──────── Lower Bound (아래 경계)
                
                상자(Box): Q1 ~ Q3✅수염(whisker): 경계 범위 내 데이터✅왜 1.5를 곱하는가?: 통계학자 존 튜키가 적당한 범위를 구하기 위해 정한 안전 마진이라고 함.1.5를 곱하면 데이터의 약 99%정도가 포함된다고 함.
              • 박스 밖의 점: 이상치
              • 가로선(Median): 중앙값
              • 🤩 1. 5 * IQR : 이상치를 판단하기 위한 경계
              • 🤩 Q3: 3사분위수(75%) LIKE 끝점
              • 🤩 Q1 : 1사분위수(25%) LIKE 시작점
              • 📦박스플롯은?
          • 정규화/표준화
            • MinMaxScaler: 모든 값을 0과 1사이로 매핑
              • fit_transform : 최대, 최소를 구해가지고 최대, 최소를 바탕으로 값을 계산해준다.
            • StandardScaler: 평균을 0, 표준편차를 1로 만듦. 보통 -3 ~ +3의 값의 범위를 가짐
          • 불균형 데이터 처리 - 다소 헷갈림
            • Oversampling: 소수 클래스의 데이터를 단순 복제하여 개수를 늘림
            • SMOTE(Synthetic Minority Over -sampling Tehnique): 소수 클래스 안에서 가장 가까운 데이터 몇개를 고르고 그 사이에 새 데이터 포인트를 만들어 내서 소수 클래스의 다양한 예시를 가상으로 늘리는 기법
            • Undersampling: 다수클래스 데이터를 줄임
          • 범주형 데이터 변환
            • 원핫인코딩 : 하나에만 1부여 (ex 색깔)
            • 레이블인코딩 : 범주를 숫자로 맵핑 (ex 사이즈)
          • 피처 엔지니어링
            • 날짜 파생 변수, 수치형 변수 조합, 로그 변환 등 모델 성능 향상을 위해 기존 데이터를 변형, 조합하여 새로운 특성(피처)를 만드는 작업
        • 참고 개념) 차원축소와 변수선택
          • 공통점 - 변수의 개수를 줄인다.
          • 차이점 (차원축소- 변형해서 줄이는 것) / (변수선택 - 그냥 고르는 것)

      새롭게 알게 된 것

      • itertools 패키지의 combinations 함수를 import하면 조합을 구성할 수 있다.
        • 예시
          • a = [ 2, 3, 5, 6, -5, 3 ]
            combinations(a, 3) 하면 3자리 수 조합을 만들어 준다.
          • combination(a, 3)은 리스트를 반환하지 않는다. “이터레이터(iterator)를 반환한다.
          • iterator는 for문에서 그냥 쓸 수 있다. 꼭 list()로 감쌀 필요 없다.
          • for 문 밖에서 여러번 반복해서 쓰고 싶을 때, 조합을 한 번에 메모리에 다 올리고 싶을 때만 list()해서 반환하면 된다.
          a =  [ 2, 3, 5, 6, -5, 3 ] 
          
          #1) 3가지 조합을 만들기 (iterator)
          #결과를 바로 반환하지 않고 필요할 때마다 하나씩 꺼내주는 생성기, 다 꺼내 쓰면 비어버림
          answer1 = combinations(a, 3)
          print(answer1) #<itertools.combinations object at 0x7ad2e932c590>
          
          #2) 3가지 조합을 만들기 (list)
          #결과를 전부 만들어 반환함. 반복해서 순회할 수 있음. 
          answer2 = list(combinations(a, 3))
          print(answer2) #[(2, 3, 5), (2, 3, 6), (2, 3, -5), (2, 3, 3), (2, 5, 6), (2, 5, -5), (2, 5, 3), (2, 6, -5), (2, 6, 3), (2, -5, 3), (3, 5, 6), (3, 5, -5), (3, 5, 3), (3, 6, -5), (3, 6, 3), (3, -5, 3), (5, 6, -5), (5, 6, 3), (5, -5, 3), (6, -5, 3)]
          
          
        • 관련 문제(코드타카, 리스트의 3가지 수 조합 합산이 0인 경우가 몇개인가?)
        • # 3개의 번호를 선택해 합산하여 0이 되는 경우의 수 구하기 from itertools import combinations # itertools 패키지에서 combinations 함수 import def solution(number): answer = 0 # 경우의 수를 저장할 변수 answer를 0으로 초기화 for i in combinations(number, 3): # number에서 3개씩 뽑는 모든 조합 순회 if sum(i) == 0: # 조합의 합이 0인지 확인 answer += 1 # 조건을 만족하면 경우의 수 1 증가 return answer # 최종 경우의 수 반환
      • 머신러닝 VOD
        • 고객세분화: 비슷한 취향/행동을 하는 사람들끼리 그룹을 나누는 것
          • 20대 여성/ 운동 좋아함/ 건강식품 구매 잦음
        • 페르소나: 그룹을 대표하는 가상 인물을 설정해 우리 고객은 이런 특징을 가진 사람이라고 구체적으로 이해하는 방법

      특히 어려웠던 것

      • SQL SELF JOIN
        • 문제
          • The resulting table should have the machine_id along with the average time as processing_time, which should be rounded to 3 decimal places.
        • 문제 해석
          • 공정은 2가지 임 (0 또는 1)
          • 하나의 공정이 완성되는데 소요시간 계산 :end-start
          • 머신당 평균 소요시간 : 모든 공정의 소요시간 / 공정 수
        • 어려웠던 이유
          • 자기 자신을 조인할 때 어떤 형태로 그러졀지 상상이 안갔다. → 손으로 직접 구현해보며 익하자!
        • 요구사항
          • 머신별 공정 1, 2의 소요시간을 구할 것
          • 그리고 그 소요시간을 합산해 실행된 공정 개수로 나눌 것
          • 소수점 자리수3까지 보이게 반올림 할 것
          • 컬럼명에 alias 붙일 것
        • 풀이
        SELECT a.machine_id,
        			ROUND(AVG(a.timestamp - b.timestamp), 3) AS processing_time
        FROM Activity A JOIN ACTIVITY B 
        USING (machine_id, process_id) #컬럼명이 같으며 ON대신 USING을 쓸 수 있음.
        WHERE a.activity_type = 'end' AND b.activity_type = 'start'
        GROUP BY a.machine_id #같은 머신끼리 avg집계해야 하므로 machine_id만 그룹핑
        
        • 핵심 아이디어
          • 자기자신을 조읺아면 사실상 같은 머신-프로세스의 모든 이벤트를 서로 짝지우는 효과가 나타난다 2*2
          • 즉 동일한 machine_id, process_id를 가지는 모든 레코드를를 서로 다 조합한다. 여기선 2행이니까 2*2개의 조합이 생긴다. start - start start - end end - start ⭐소요시간을 계산하기 위해 남겨야 할 행 end - end
          • 주로 같은 프로세스 안에서 이벤트 쌍을 만들어 시간 간격을 계산하거나, 이벤트 순서를 비교할 때 쓴다.
          • 집계 기준은 machine_id만 process_id는 조인을 위해 사용되었지만, 집계는 machine_id 단위로만 묶어서 평균 처리시간을 구함.

      다음에 적용해 볼 것

      • [ ] 불균형 데이터 전처리 다시 한번 코드 보기!
      • [ ] 코드스피넷 위주로 코드 실습해보기!