Today I Learned

[내일배움캠프 QA/QC 6기] TIL #030

JiJi0406 2026. 6. 23. 20:49

001

오늘의 코드카타

40.3진법 뒤집기

 


문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

 

제한조건

  • n은 1 이상 100,000,000 이하인 자연수입니다.

 

입출력 예

n result
45 7
125 229

 

입출력 예 설명

입출력 예 #1

답을 도출하는 과정은 다음과 같습니다.

n (10진법) n (3진법) 앞뒤 반전 (3진법) 10진법
45 1200 0021 7

 

따라서 7을 return해야 합니다.

 

입출력 예 #2

답을 도출하는 과정은 다음과 같습니다.

n (10진법) n (3진법) 앞뒤 반전 (3진법) 10진법
125 11122 22111 229

 

따라서 229를 return해야 합니다.

 

 

더보기
def solution(n):
    a =''
    while n > 0:
        a = a + str(n%3) # 거꾸로 3진법 전환: 3으로 나눈 나머지를 문자열로 전환해 a에 누적하여 붙임 
        n = n // 3 # 3으로 나눈 몫을 n으로 갱신
    return int(b, 3)

 

+

int('문자열', 진법)

→ int()함수에  이 문자열이 몇 진법인지 숫자를 같이 넘겨주면, 파이썬이 알아서 10진수로 싹 변환해줌

(몰라서 찾아봄...)

 

 

 


 


002

오늘 학습한 내용

데이터 분석 심화 주차 D+5

 

지도학습 vs 비지도학습 복습 ~

더보기

차이점

  • 정답(y값)이 있는지 없는지
  • 지도학습은 x, y(정답)을 같이 주고 학습시켜서 정답을 예측하는 게 목표 (예: 스팸 메일 분류), 평가도 명확한 지표로 가능함
  • 비지도학습은 y 없이 x만 넣어서 숨은 구조인사이트를 발견하는 게 목표 (예: 고객 그룹 묶기), 평가는 클러스터 간 간격이 얼마나 넓은지/안에서 얼마나 동질적인지 등등 봄
지도학습은 모델이 정답 맞히면 끝 / 비지도학습은 사람이 의미를 부여해야 완성

 

 

[ (라) 머신러닝 심화 2회차 - 비지도학습: 군집화, 차원축소 ]

 

1. 클러스터링

 

익숙한 유세포 분석 검사 결과도 클러스터링을 거친 후 시각화한 것

 

1) 클러스터링이란

  • 이름 없는 데이터에 이름표 달아주기 - 서로 가까이 있는 것들끼리 그룹 묶는 방법론
  • 군집 거리는 가까울수록, 군집 거리는 멀수록 좋음
  • 언제 씀?: 크고 복잡한 데이터를 단순화할 때, 정답 없는 새 데이터 분류할 때, 이상 탐지할 때(어떤 클러스터에도 속하지 않는 데이터를 이상치로 봄)
  • 정답이 없으니까 분석가가 그만큼 더 설명을 잘 해줘야 함!

2) 클러스터링 알고리즘이 다르면 결과도 다르다

  • 거리 측정 방식이나 알고리즘 종류에 따라 같은 데이터라도 군집이 완전히 다르게 형성

3) 문제 해결 프로세스

  • 문제 정의(뭘 묶고 싶지?) → 특징 추출(어떤 피처로 비교?) → 군집 수행(K-Means, DBSCAN 등) → 결과 해석(군집 특징 의미 부여)
  • QAQC 예시: 불량 유무로만 구분된 데이터를 → 공정 데이터(온도, 압력, 습도 등) 기반으로 "불량 유형 그룹"으로 재분류 

4) 활용 예시

  • 요약/시각화: 데이터 다 안 봐도 클러스터별 특징으로 경향 파악 (예: 1년치 뉴스 클러스터링해서 주요 토픽 찾기)
  • 데이터 이해: 라벨 없는 데이터의 숨은 패턴 발견 (예: 카드 사용 패턴으로 고객 세그먼트 클러스터링)
  • 전략 수립: 클러스터 해석해서 실제 액션 아이템 도출 (예: VIP/가격 민감/트렌드 추종 고객으로 분류) 

5) 거리 측정

  • 두 데이터가 얼마나 가까운지 측정하는 방식, 측정 방식 따라 완전 다른 클러스터 생성
  • 유클리디안 거리(피타고라스 정리, 두 점 사이 직선 거리)가 가장 기본 : 연속형 수치 데이터에 적합, 스케일 비슷할 때 좋음, 이상치엔 민감함
  • 맨하탄 거리는 차원별 절댓값 차이의 합 (다른 방법들도 있는데 자세히 몰라도 됨)

→ 클러스터링은 거리 기반 알고리즘이라 스케일링이 필요!

    →  안 하고 K-means 돌리면 값이 큰 피처가 거리 계산을 지배해서 결과 왜곡됨

 

6) 계층적 군집화

  • 처음에 그룹 개수 안 정함 → 데이터 간 거리를 계산해서 나무 모양(덴드로그램)으로 묶어가는 방식
  • 모든 데이터를 1개짜리 군집으로 시작해서 가장 비슷한 것끼리 점점 묶어가는데, 어느 높이에서 자르냐에 따라 군집 개수가 달라짐

7) K-means 

  • 가장 널리 쓰는 클러스터링 알고리즘, 데이터를 K개 군집으로 나누는 분할 기반 방식
  • K개 그룹 정하고 → 중심점 무작위 설정 → 가까운 중심점의 그룹으로 모임 → 중심점이 그룹 중앙(평균값)으로 이동 → 중심점 안 바뀔 때까지 반복
  • 장점 : 빠르고 단순! (현업에서 중요) / 단점 : K를 미리 정해줘야 하고, 이상치에 취약하고, 크기/밀도 다른 군집은 잘 못 찾음

8) 최적의 K 정하는 법

  • Elbow Method: K ↑ →  군집 내 거리의 합 ↓, 감소폭이 급격히 꺾이는 지점(팔꿈치) 선택
  • Silhouette Score: -1~1 사이 값, 1에 가까울수록 군집이 잘 분리된 거임 → 최고점 선택

9) DBSCAN (밀도 기반)

  • 가까이 많이 묶여있는 애들을 일단 클러스터로 묶는 방식, K 미리 안 정해도 되고 임의 형태의 클러스터도 찾을 수 있음
  • 노이즈 많거나 / 불규칙하거나 / 클러스터 개수를 모를 때 좋음! 어디에도 속하지 않는 데이터는 노이즈로 간주

 

2. 차원축소

1) 왜 씀???

  • 실무 데이터는 보통 수십~수천 개 피처를 가지는데, 그대로 두면 시각화 불가능, 계산 비용 폭증, 차원의 저주(차원 높아질수록 데이터 간 거리가 무의미해짐) 문제가 생김
  • 그래서 중요한 정보는 최대한 보존하면서 차원을 줄이는 기법이 나온 거임

2) PCA (주성분 분석)

  • 여러 센서 데이터를 가장 중요한 몇 개 축으로 요약하는 기법, N개 변수를 1~2개로 줄일 수 있음
  • 데이터가 가장 넓게 퍼져있는 방향을 찾아서 그걸 새 좌표축(주성분)으로 재정렬 (데이터 구조에 맞게 좌표계를 회전)
  • 머신러닝 파이프라인의 전처리 단계로 주로 씀 (장점: 빠름, 노이즈 제거 효과적 / 단점: 선형 관계만 포착, 이상치에 민감)

3) t-SNE

  • 고차원에서 가까운 점은 저차원에서도 가깝게, 먼 점은 멀게 배치하는 비선형 방법
  • PCA로는 못 잡는 복잡한 구조를 보고 싶을 때 사용
  • 단점은 느리고, 실행마다 결과 다르고, 새 데이터엔 적용 불가(매번 재학습 필요), 축 자체에 의미 없음
일반적으로 PCA로 시작 → 필요하면 t-SNE로 시각화 !

 

+ QAQC 하면서 비지도학습 많이 쓸 일은 없을 것 같고, 쓴다면 차원축소 정도. 일단 지도학습 충분히 마스터하고 여유 될 때 비지도학습 봐보자