JHJ

[내일배움캠프 QAQC 부트캠프]통계/머신러닝 찍먹(26일차, 260617) 본문

[내일배움캠프 QAQC 부트캠프]/TIL

[내일배움캠프 QAQC 부트캠프]통계/머신러닝 찍먹(26일차, 260617)

Jo, Hongjin 2026. 6. 17. 09:54

1. 오늘 학습 키워드:

기초통계, 머신러닝




AI 이미지

2. 오늘 학습 한 내용을 나만의 언어로 정리하기:

통계학 기초

데이터 분석에서 '통계' - 데이터 기반 '의사결정'와 연결
통계는 데이터를 ~ 이해, 해석, 요약, 패턴 -> 추론과 결론 도출: 즉, 데이터 기반의 의사결정
기술통계: 데이터 요약/설명
평균, 중앙값, 분산, 표준편차 등
평균과 중앙값, 이상치의 영향 차이 有
분산: 데이터의 흩어짐 정도
표준편차: 분산의 제곱근,원데이터와 동일한 '단위'

추론통계: 표본을 통한 모집단 추정, 가설 검정
신뢰구간, 가설검정 등
데이터 일부를 통해 전체 추정
신뢰구간: 모집단의 평균이 특정 범위 내에 있을 것이라는 확률, 기본 95%
가설검정: 귀무가설(H0)과 대립가설(H1),P-value를 통해 기각여부 결정
위치추정: 데이터의 중심(위치)이 어딘지
평균, 중앙값이 대표적
코드
mean = np.mean(data)
median = np.median(data)

변이추정: 데이터들이 서로 얼마나 다른지
분산, 표준편차, 범위
코드
variance = np.var(data)
std_dev = np.std(data)
data_range = np.max(data) - np.min(data)

히스토그램: 연속형 데이터의 분포를 막대로 표현
박스플롯: (25%, 중앙값, 75%)로 박스 구성, 최대값과 최소값으로 선 연장
코드
plt.hist(data, bins=5)
plt.boxplot(data)

파이차트: 이진데이터(참/거짓)이 차지하는 비율 표현 우수
막대 그래프: 범주형 데이터의 분포를 막대로 표현
코드
data.plot(kind='bar')

산점도
코드
plt.scatter(A,B)

상관관계: 데이터 중 두 변수 간의 관계를 측정
-1이나 1에 가까워지면 강력한 상관관계
코드
correlation = np.corrcoef(A, B)[0, 1]

인과관계: 한 변수가 다른 변수에 미치는 영향
상관관계와는 다르게 원인, 결과가 분명해야 함

다변량 분석: 여러 변수 간의 관계를 분석
sns.pairplot(df) : 두 변수 간 관계를 시각화, 모든 경우의 수
df.corr(): 두 변수 간 상관관계계수 계산, 모든 경우의 수
sns.heatmap(df.corr()): 상관관계 히트맵화

 

머신러닝/라이브러리 기초
AI⊃머신러닝⊃딥러닝
AI: 인간의 지능을 요구하는 업무를 수행하기 위한 시스템
머신러닝: 관측된 패턴을 기반으로 의사 결정을 하기 위한 알고리즘
데이터 수집과 처리 기술의 발전 - 대용량 데이터의 패턴을 인식 및 예측, 분류의 방법론
딥러닝: 인공신경망을 이용한 머신러닝

데이터 사이언스: 통계학/컴퓨터공학 기반 융합학문(AI 포괄)
데이터 분석: 데이터 집계, 통계 분석, 머신러닝 등을 포함한 행위

데이터를 기반으로 한 의사결정 희망 - 머신러닝의 발전
통계: 모집단과 표본, 추론 등
데이터 처리 기술의 발전, 저장매체 가격의 하락 등
이에 따라 머신러닝: 전체 데이터에서 패턴 파악하기 위한 방법 -> 발전
지도학습: 문제와 답을 알려주고 학습 --> 예측/분류
비지도학습: 답을 알려주지 않고 학습 --> 연관/군집
강화학습: 보상으로 행위를 강화하는 학습 --> 보상
다양한 분야에서 머신러닝 적용

첨언
데이터 분석에서 머신러닝이 필수는 아님
But 취직 시 머신러닝을 활용한 업무와 연관은 있음
+ 이 강의만 듣는다고 머신러닝 데이터 사이언티스트가 될 수는 없음
머신러닝 실습 소프트웨어: VS code ,Colab, ANACONDA 가 대표적
Jupyter Notebook: Data Science를 위한 환경, 
코드작성, 시각화, Markdown을 이용한 문서 작성

프로그래밍이 늘 좋은 것은 아님(ex. 라이브러리 호환성 등)
파일은 ipynb 형식으로 저장하는게 좋음 - colab으로 보든 비슷하기 떄문

좌측 메뉴바
Explorer: 탐색기, 작업공간
Search: 파일 찾기
Source Control: Git이라고 불리우는 코드 버전관리 툴(거의 쓸 일X)
Run and Debug: 스크립트 실행, 디버깅
Extension: 확장프로그램
상단에도 File, Edit, Selection, View, Go, Run, Terminal ,Help 기능 有

VS CODE CELL 종류
Code cell: Python syntax 기반
Markdown cell: Markdown syntax 기반

단축키:
CTL + Enter: 현재 셀 실행
Shift + Enter: 현재 셀 실행 후 다음 셀로 커서 옮기기

pip:  Python 프로그래밍 언어를 위한 표준 패키지 관리자
터미널: pip install {라이브러리명}
jupyter cell: 앞에 !를 붙여 터미널 대신 가능
!pip install pandas
!pip uninstall pandas -y 
-y는 삭제에 대해 yes라는 의미

 라이브 세션

통계

1회차
데이터는 답이 하나가 있는게 아님 - 소거 등으로 깎아내는 과정
통계 - 패턴을 객관적 수치화 -> 핵심 판단
데이터(vs감): 수치에 기반한 정확한 진단과 근거를 도출
제조업 예: 압연 공정의 제품 두께 편차
샘플 예측: 인장 강도 시험, 비교, 가설검정, 분산 분석(아노바)

데이터 종류
크게 수치형/범주형
작게 연속형, 이산형, 명목형, 순서형으로 분류

도수분포표
도수, 상대도수, 누적도수, 최대/최소값, 계급, 구간의 수, 구간의 폭 등

히스토그램화 관련 코드
s = pd.Series(data)
plt.hist(s, bins=10, edgecolor='black')  


대표값
평균의 함정: 마이클 조던(이상치)과 평균연봉(평균)
대표값 종류: 평균, 중앙값(이상치 존재시), 최빈값(데이터가 범주형이면)

(산술)평균: mean, 총합을 평균으로 나눈 값(이상치의 영향 O)
mean_value = np.mean(data)
중앙값: median, 오름차순, 데이터의 50%에 해당하는 값(이상치의 영향X)
median_value = np.median(data) 
최빈값: mode, 가장 자주 등장하는 값, 2개 이상 존재 가능
mode_value = stats.mode(data, keepdims=False) 

메서드 함수로는
df["test"].mean()
df["test"].median()
df["test"].mode()

산포도
편차: 평균과의 차,  개별값과 평균 간의 거리
분산: 편차 제곱 평균,  데이터의 전체적 퍼짐 정도
표준편차: 분산 제곱근,  실제 변동성 해석
변동계수: 표준편차/평균,  다른 단위의 데이터 비교

산포도 코드
deviations = data - mean_value
variance = np.mean(deviations ** 2)
std_dev = np.sqrt(variance)
cv = std_dev / mean_value

사분위수: 4등분했을 때 각각 25%, 50%, 75% 해당값
사분위 범위(IQR):  Q3-Q1, 주로 이상치 탐지에 활용 

사분위 코드
Q1 = np.percentile(data, 25)  # 제1분위수 (Q1)
Q2 = np.percentile(data, 50)  # 제2분위수 (Q2, 중앙값)
Q3 = np.percentile(data, 75)  # 제3분위수 (Q3)
IQR = Q3 - Q1

왜도: 분포의 좌우 비대칭성, 평균을 중심으로 좌우로 치우친 정도
- 양수(+): 우측 꼬리 길음, right skew
- 0: 대칭적 (정규분포와 유사)
- 음수(-): 좌측 꼬리 길음, left skew
첨도: 분포의 뾰족한 정도, 데이터의 분포가 정규분포보다 더 뾰족한지
기본 값은 3이며, 엑셀이나 파이썬에서는 편의를 위해 0을 기준
- 초과 첨도 양수(+): 정규분포보다 뾰족함 ( 첨도 > 3) 
- 초과 첨도 0: 정규분포와 유사 ( 첨도 =3 ) 
- 초과 첨도 음수(-): 정규분포보다 평평함 ( 첨도 < 3) 

코드
skewness = skew(data)
kurt = kurtosis(data)

정규분포:  평균을 중심으로 좌우 대칭
곡선은 각 확률값을 나타내며, 모두 더하면 1
평균 0, 분산 1을 가지는 경우, 표준정규분포

koreanize maplotlib 라이브러리
--> 별도로 폰트 설정할 필요X
사용예시
-----------------------------------
#!pip install koreanize-matplotlib
import numpy as np
import koreanize_matplotlib 
import matplotlib.pyplot as plt
import seaborn as sns

# KDE 그래프 그리기 (histplot 활용)
plt.figure(figsize=(10, 6))
sns.kdeplot(data, color='red', linewidth=2, label="KDE (Estimated PDF)")

plt.title("KDE (Kernel Density Estimation)", fontsize=14)
plt.xlabel("값", fontsize=12)
plt.ylabel("밀도", fontsize=12)
plt.legend()
plt.grid()
plt.show()
-----------------------------------
머신러닝

머신러닝: 기계가 학습하고 스스로 패턴을 찾아내 적절한 작업을 수행하도록 학습하는 알고리즘
AI: 인간처럼 학습/추론 할 수 있도록 만들어진 프로그램
머신러닝: 데이터를 활용해 학습할 수 있는 알고리즘
딥러닝: 인공 신경망을 이용해 거대 데이터셋 학습
제조업: 품질 자동 분석, 공정 이상 탐지/예측, 결함률 감소/생산성 향상 등

머신러닝 학습의 종류
지도 학습: 회귀/분류, 문제와 정답 알려주고
비지도 학습: 군집/차원 축소,답을 가르쳐주지 않고
강화 학습: 보상을 최대화하는 방향으로

지도 학습:

분류
입력 데이터: 레이블(정답)이 포함된 데이터 필요
츨력 데이터:입력 데이터를 특정 범주를 분류한 결과
알고리즘: 로지스틱 회귀, 의사결정 특징 등

분류의 주요 유형
이진 분류: 데이터를 2개의 카테고리로 분류(ex. 정상/비정상)
다중 분류: 데이터를 3개 이상으로 분류(ex. 성적 등)

로지스틱 회귀(이진), 의사결정 트리(트리 형식), 서포트 벡터 머신(경계선)

회귀: 데이터 기반 연속적인 숫자 값 예측
선형회귀: 데이터가 직선 형태 분포라 가정
다중회귀: 데이터를 비선형 모델링할 떄 사용 ex. 곡선
릿지 회귀/라쏘 회귀: 규제(패널티)를 추가한 선형 회귀, 과적합 현상 방지
서포트 벡터 회귀, 결정 트리 회귀/랜덤 포레스트 회귀, 딥러닝 기반 회귀 등

비지도학습: 

정의: 레이블(답) 없는 데이터 분석 -> 패턴 찾기,
목적: 내부의 숨겨진 구조/특징 -> 알지못한 새로운 인사이트
특징: 유사성과 차이 측정 등

클러스터링(군집 분석): 데이터를 유사한 그룹으로 묶기
K-Means, DBSCAN, 계층적 클러스터링 등의 알고리즘

차원축소: 데이터를 간결화하고 중요한 특징 남기기
PCA , t-SNE, UMAP 등의 알고리즘

강화학습: 보상을 통해 행위 강화를 하는 학습


Scikit-learn(사이킷런) 라이브러리
파이썬을 대표하는 머신러닝 분석 라이브러리
지도 학습, 비지도 학습, 전처리, 모델 평가, 데이터 분할 등이 가능
무겁기에 from ~ import ~ 으로 일부만 호출하는 것을 추천

머신러닝 모델링
문제 정의: 가설/모델 설정
데이터 전처리: 데이터 수집, 데이터 클리닝, 피쳐 엔지니어링, 데이터 분할 등
모델링: 모델 선택, 학습, 테스트/예측, 평가

코드카타

알고리즘
 
72 -  달리기 경주

def solution(players, callings):
    #딕셔너리 제작
    player_indices = {player: i for i, player in enumerate(players)}
    
    # 1. callings 을 쭉 돌면서 안에 존재하는 값을 찾기
    for i in callings:
        A = player_indices[i]
        B = A - 1
        B_name = players[B]
    # 2. 값의 인덱스와 앞 값의 인덱스를 변경
        #players 내에서 변경
        players[A], players[B] = players[B], players[A]
        #딕셔너리 내에서 변경
        player_indices[i] = B
        player_indices[B_name] = A
    return players

SQL

36 - 보호소에서 중성화한 동물

SELECT A.ANIMAL_ID , A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A
INNER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE LIKE 'Intact%'
AND (B.SEX_UPON_OUTCOME LIKE 'Spayed%' OR B.SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY A.ANIMAL_ID
37 - 조건에 맞는 도서와 저자 리스트 출력하기

SELECT A.BOOK_ID, B.AUTHOR_NAME, A.PUBLISHED_DATE
FROM BOOK AS A
INNER JOIN AUTHOR AS B
ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE CATEGORY = '경제'
ORDER BY A.PUBLISHED_DATE
38 - 조건별로 분류하여 주문상태 출력하기

SELECT ORDER_ID, PRODUCT_ID, OUT_DATE,
CASE
    WHEN OUT_DATE IS NULL THEN '출고미정'
    WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
    ELSE '출고대기'
END AS '출고여부'
FROM FOOD_ORDER
ORDER BY ORDER_ID
39 - 성분으로 구분한 아이스크림 총 주문량

SELECT B.INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS A
INNER JOIN ICECREAM_INFO AS B
ON A.FLAVOR = B.FLAVOR
GROUP BY B.INGREDIENT_TYPE
ORDER BY A.TOTAL_ORDER
40 - 루시와 엘라 찾기

SELECT ANIMAL_ID,NAME,SEX_UPON_INTAKE
FROM ANIMAL_INS 
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID

3. 학습하며 겪었던 문제점& 에러 + 회고

3-1 문제점& 에러: X

                           

3-2 회고: 비슷한 내용이 있다는 둘째치고 일단 양이 너무 많다. 

 


4. 내일 학습할 것은 무엇인지(기본적인 AI 진단퀴즈, 코드카타, TIL 제외)

- 목요일(18일): 라이브 세션 참여, 강의수강(통계 2강, 머신러닝 - 선형회귀), 어학공부