
에이타니
설명 가능한 AI (XAI)
● 필요한 이유
1. 이미 학습된 모델의 이사결정 과정을 해석하고 설명한다.
2. 블랙박스 모델의 신뢰성 확보
3. 규제 준수를 위한 설명 제공
4. 모델의 문제점 진단 및 개선 방향 파악
SHAP (SHapley Additive exPlanations)
● 협력 게임 이론의 Shapley Value 개념을 기반으로 각 특성(feature)이 예측에 기여한 정도를 공정하게 분배하는 방법
● 개별 예측(local)뿐만 아니라 특성 중요도를 집계하여 전역적(global) 해석도 가능하다.
● 모델에 구애받지 않는(model-agnustic) 기법으로 선형 모델, 트리 기반 모델, 딥러닝 등 다양한 모델에 적용 가능하다.
● 이미 학습된 모델의 예측을 설명하는 사후 해석(post-hoc interpretation) 기법이다.
◎ Summary Plot
● 각 점의 색상은 해당 피처의 원래 값(Feature value)의 크기를 나타낸다.
● 일반적으로 붉은색은 피처 값이 높음을, 푸른색은 피처 값이 낮음을 의미하며, 모델의 예측 확률 자체를 나타내는 것이 아니다.
LIME (Local Interpretable Model-agnostic Explanations)
● 복잡한 블랙박스 모델의 특정 예측을 설명하기 위해
1. 해당 예측 주변(local)에서 새로운 데이터를 샘플링하고,
2. 이 국소 영역에서 해석 가능한 단순 모델(예 : 선형 모델)을 학습하는 방식으로 작동한다.
● 한계점 : 분석하고자 하는 샘플 근처의 데이터를 무작위 생성(Perturbation)하여 로컬 대리 모델(Local Surrogate)을 학습시키므로
→ 시드(Seed)를 고정하지 않으면 실행할 때마다 설명이 달라질 수 있는 불안정성(Instability)이 한계점으로 지적된다.

코드카타
86번 H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다.
어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다.
위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한사항
● 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
● 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
🤔
H-Index 문제는 논문 인용 횟수를 내림차순 정렬한 후,
현재 위치(i+1)와 해당 논문의 인용 횟수를 비교하는 방식으로 해결한다.
정렬된 배열에서 citations[i] >= i+1이면
현재 논문 개수만큼 인용 조건을 만족한다는 의미이다.
조건을 만족하지 않는 순간 이전 값이 최대 H-Index가 된다.
def solution(citations):
# 인용 횟수가 많은 순서대로 정렬
citations.sort(reverse=True)
# 논문 개수만큼 반복
for i in range(len(citations)):
# 현재 논문 개수 = i + 1
# 현재 논문의 인용 횟수 = citations[i]
if citations[i] < i + 1:
# i번째 논문부터 조건을 만족하지 않음
# 따라서 이전 값이 H-Index
return i
# 모든 논문이 조건을 만족하는 경우
return len(citations)
87번 n^2 배열 자르기
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
n² 크기의 배열을 직접 생성하면 메모리 초과
필요한 구간(left~right)만 계산하는 방식 사용
2차원 배열의 값 규칙 발견:
arr[row][col] = max(row, col) + 1
1차원 인덱스를 2차원 좌표로 변환:
row = index // n
col = index % n
시간복잡도: O(right-left)
공간복잡도: O(right-left)
def solution(n, left, right):
answer = []
for i in range(left, right + 1):
# 현재 위치의 행
row = i // n
# 현재 위치의 열
col = i % n
# 값 계산
answer.append(max(row, col) + 1)
return answer
88번 행렬의 곱셈
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
● 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
● 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
● 곱할 수 있는 배열만 주어집니다.
결과 배열 크기:
행 → arr1의 행 개수
열 → arr2의 열 개수
i: 결과 행 위치
j: 결과 열 위치
k: 곱셈에 사용되는 중간 인덱스
행렬 곱셈은
answer[i][j] += arr1[i][k] * arr2[k][j]
형태로 구현한다.
시간복잡도는 O(행 × 열 × 중간크기) 이다.
def solution(arr1, arr2):
# 결과 배열 생성
# arr1의 행 개수 × arr2의 열 개수 크기
answer = [[0] * len(arr2[0]) for _ in range(len(arr1))]
# arr1의 행 순회
for i in range(len(arr1)):
# arr2의 열 순회
for j in range(len(arr2[0])):
# 곱한 값을 저장할 변수
total = 0
# arr1의 열과 arr2의 행 크기는 같음
for k in range(len(arr2)):
# 행렬 곱셈 계산
total += arr1[i][k] * arr2[k][j]
# 계산 결과 저장
answer[i][j] = total
return answer

머신러닝 기초 강의
강의에서는 라이브세션에서 다뤘던 이론적인 부분과 실습부분으로 나눠서 다뤘다. 이론부분은 전에 TIL에서 정리한 내용이 있기 때문에 실습 내용 위주로 정리하겠다.

머신러닝 심화 라이브 세션 2회차
⭐ 클러스터링 (Clustering, 군집화)
● 분석 대상이 되는 데이터의 그룹을 만드는 방법론
● 그룹을 만들 때는 마구잡이로 만드는 것이 아니라 특정 기준을 가지고 제작
○ intra-cluster(군집 내 거리) : 군집 사이의 데이터들의 거리는 가까울수록 좋음
○ inter-cluster(군집 간 거리) : 각각의 군집 사이의 거리는 멀수록 좋음.
● 필요한 경우
1. 머신러닝 문제해결 과정에서 학습 데이터의 구조적 이해
→ 크고 복잡한 데이터셋을 소수의 균일한 범주로 단순화
2. 새로운 데이터 분류
→ 정답이 없거나 모르는 경우
3. 이상 탐지
→ 이미 보유하고 있거나, 수집하고 있는 데이터셋과 다른 패턴 식별

- 요약 및 시각화 (Summarization)
사용 목적 : 수많은 양의 데이터를 몇 개의 그룹으로 묶어서 전체 특성을 파악할 때
장점 : 모든 데이터를 확인하지 않아도 전체 데이터 특성을 이해할 수 있다.
- 데이터 이해 (Understanding)
사용 목적 : 라벨링이 되어있지 않은 데이터의 분포 및 특성을 확인할 때
장점 : 데이터의 숨겨진 패턴이나 구조를 발견할 수 있다.
- 전략 수립 (Strategy Planning)
사용 목적 : 클러스터링 결과를 통해 실제 비즈니스 Action Item을 도출할 때
특징 : 현업에서 많이 활용되며, 분석가의 해석 능력이 중요하다.
● 프로세스

계층적 군집화 (Hierarchical Clustering)
- 데이터 간의 거리를 계산하여 나무 모양의 계층 구조(Dendrogram)를 만들어가는 방식

K-means
● 데이터를 k개의 군집으로 나누는 분할 기반 클러스터링 방법

● 동작 원리 1
1. 군집의 개수 설정
2. 초기 중심(Centroid) 설정
3. 데이터를 군집에 할당
4. 중심점 재설정(갱신)
5. 수렴까지 반복
https://velog.io/@jhlee508/머신러닝-K-평균K-Means-알고리즘
[머신러닝] K-평균(K-Means) 알고리즘
머신러닝 비지도학습에 속하는 K-means 알고리즘은 K개의 군집(Cluster)로 묶는(Clusting) 알고리즘이다.
velog.io
● 최적의 K를 정하는 방법
K-Means의 유일한 단점이자 가장 중요한 하이퍼파라미터는 K(군집 개수)이다. 두가지 방법으로 정함.
1. Elbow Method
- K를 늘릴수록 inertia(군집 내 거리 합)가 감소
- 감소 폭이 급격히 꺾이는 지점(팔꿈치)을 선택
2. Silhouette Score
- 개별 데이터가 할당된 군집 내 데이터와 얼마나 가깝게 군집화 되어있는지,
그리고 다른 군집에 있는 데이터와는 얼마나 멀리 분리되어 있는지를 수치로 나xksoa.
- -1 ~ 1 사이. 1에 가까울수록 군집이 잘 분리됨. 최고점을 선택
● 장점과 한계
- 빠르고 단순하다.
- 클러스터의 갯수를 지정해주어야 한다.
- 클러스터 생성 시 데이터의 분포 및 특성을 반영하기 어렵다.
- Outlier에 취약한 편이다.
Density Based Clustering (밀도 기반 군집화)
● 밀도 기반 클러스터링 알고리즘으로, 데이터 포인트가 밀집된 영역을 클러스터로 정의한다.
→ 밀도 = 데이터 포인트가 얼마나 가깝게 모여있는지

⭐ 차원축소
고차원 데이터의 복잡성을 줄이면서 중요한 정보는 보존하는 차원 축소 기법을 학습한다.
데이터의 숨겨진 패턴을 발견하고 효과적으로 시각화할 수 있다.
PCA (주성분 분석)
● 여러개의 센서 데이터를 가장 중요한 몇개의 축으로 요약하는 기법


t-SNE
● 고차원에서 가까운 점들은 저차원에서도 가깝게, 먼 점들은 멀게 배치하는 방법
