이 글에서는 AI 모델을 활용하여 pgvector에 저장된 벡터 데이터를 분석하는 방법을 다룹니다.
특히, 이상 탐지(Anomaly Detection), 추천 시스템, 벡터 데이터 패턴 분석을 중심으로 활용법을 정리합니다.
✅ AI를 활용한 벡터 데이터 이상 탐지 (Anomaly Detection)
✅ 벡터 데이터를 활용한 추천 시스템 구축
✅ 차원 축소(PCA, t-SNE) 기법을 활용한 벡터 데이터 시각화
🚀 1. 벡터 데이터를 AI로 분석하는 이유
벡터 데이터는 일반적인 SQL 기반 분석과 다르게, AI 모델을 활용한 패턴 분석이 필수적입니다.
특히, 유사도 기반 검색을 활용하여 데이터 이상 탐지, 추천 시스템, 클러스터링을 수행할 수 있습니다.
✅ AI 벡터 분석 주요 활용 사례
분석 유형설명
이상 탐지 (Anomaly Detection) | 비정상적인 벡터 데이터 감지 (ex: 금융 사기 탐지) |
추천 시스템 (Recommendation System) | 유사한 사용자의 행동을 벡터로 분석하여 추천 |
차원 축소 & 데이터 시각화 | 벡터 데이터를 2D/3D로 변환하여 패턴 분석 |
🚀 2. AI 기반 벡터 데이터 이상 탐지
벡터 데이터를 활용하여 이상 탐지(Anomaly Detection) 를 수행할 수 있습니다.
예를 들어, 정상적인 데이터와 다른 패턴을 보이는 벡터를 찾아낼 수 있습니다.
🔹 1️⃣ 벡터 데이터를 활용한 이상 탐지 개념
✅ 벡터 공간에서 정상 데이터는 특정 패턴을 가지지만, 이상치는 벡터 공간에서 멀리 떨어져 있음
✅ 유클리드 거리(Euclidean Distance), Mahalanobis Distance를 활용하여 이상치를 감지 가능
📌 예제: pgvector에서 가장 먼 벡터 찾기
SELECT content, embedding <-> (SELECT AVG(embedding) FROM embeddings) AS anomaly_score
FROM embeddings
ORDER BY anomaly_score DESC
LIMIT 5;
✅ 평균 벡터와 가장 거리가 먼 데이터 5개를 찾아 이상 탐지 수행
🔹 2️⃣ Python을 활용한 벡터 이상 탐지
AI 모델을 활용하여 이상치를 감지하는 방법을 설명합니다.
📌 Python 코드: IsolationForest를 활용한 이상 탐지
import numpy as np
import psycopg2
from sklearn.ensemble import IsolationForest
# PostgreSQL 연결 정보
DB_HOST = "localhost"
DB_PORT = "5432"
DB_NAME = "ragdb"
DB_USER = "postgres"
DB_PASSWORD = "postgresql"
# PostgreSQL에서 벡터 데이터 가져오기
def fetch_vectors():
conn = psycopg2.connect(
host=DB_HOST, port=DB_PORT,
database=DB_NAME, user=DB_USER, password=DB_PASSWORD
)
cur = conn.cursor()
cur.execute("SELECT id, embedding FROM embeddings;")
rows = cur.fetchall()
cur.close()
conn.close()
return rows
# 벡터 데이터를 numpy 배열로 변환
vectors = fetch_vectors()
X = np.array([np.array(v[1]) for v in vectors])
# Isolation Forest 모델 적용 (이상 탐지)
model = IsolationForest(contamination=0.05) # 상위 5%를 이상치로 감지
preds = model.fit_predict(X)
# 이상 탐지 결과 출력
for i, (vector_id, _) in enumerate(vectors):
if preds[i] == -1: # 이상치로 판별된 경우
print(f"Anomaly detected: ID={vector_id}")
✅ Isolation Forest를 사용하여 pgvector의 벡터 데이터 중 이상치를 감지
🚀 3. 벡터 데이터를 활용한 추천 시스템 구축
벡터 데이터 기반으로 사용자 행동을 분석하고 추천 시스템을 구축할 수 있습니다.
🔹 1️⃣ 추천 시스템 개념
✅ 사용자 행동 데이터를 벡터로 변환하여 가장 유사한 패턴을 가진 사용자를 찾음
✅ Cosine Similarity를 활용하여 유사한 사용자 또는 상품 추천 가능
📌 예제: pgvector에서 가장 유사한 벡터 찾기
SELECT content, embedding <#> '[0.1, 0.3, 0.5]' AS similarity
FROM embeddings
ORDER BY similarity
LIMIT 5;
✅ 가장 유사한 벡터 5개를 검색하여 추천 시스템에 활용 가능
🔹 2️⃣ Python을 활용한 추천 시스템 구현
📌 Python 코드: 유사한 사용자 찾기
import psycopg2
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# PostgreSQL 연결 정보
def fetch_vectors():
conn = psycopg2.connect(
host=DB_HOST, port=DB_PORT,
database=DB_NAME, user=DB_USER, password=DB_PASSWORD
)
cur = conn.cursor()
cur.execute("SELECT id, embedding FROM embeddings;")
rows = cur.fetchall()
cur.close()
conn.close()
return rows
# 벡터 데이터 가져오기
vectors = fetch_vectors()
X = np.array([np.array(v[1]) for v in vectors])
# 특정 사용자의 벡터와 유사한 데이터 찾기
query_vector = np.array([0.1, 0.3, 0.5]) # 검색할 벡터
similarities = cosine_similarity([query_vector], X)[0]
top_k = np.argsort(similarities)[-5:]
print("Top 5 Recommendations:")
for idx in top_k:
print(f"Recommended ID: {vectors[idx][0]}")
✅ 벡터 기반 추천 시스템을 구현하여 가장 유사한 데이터를 추천
🚀 4. 차원 축소(PCA, t-SNE) 기법을 활용한 벡터 데이터 시각화
벡터 데이터는 고차원(1536차원)으로 존재하므로, 시각화를 위해 차원 축소 기법(PCA, t-SNE)을 적용할 수 있습니다.
📌 Python 코드: PCA를 활용한 벡터 데이터 시각화
import numpy as np
import psycopg2
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# PostgreSQL 연결 정보
vectors = fetch_vectors()
X = np.array([np.array(v[1]) for v in vectors])
# PCA 적용 (1536차원 → 2차원)
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
# 시각화
plt.scatter(X_reduced[:, 0], X_reduced[:, 1])
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA-based Vector Visualization")
plt.show()
✅ PCA를 활용하여 벡터 데이터를 2차원으로 변환하여 시각화 가능
📌 5. 최종 정리
✅ AI 기반 벡터 데이터 이상 탐지 (IsolationForest, 거리 기반 이상 탐지)
✅ 벡터 데이터를 활용한 추천 시스템 구축 (Cosine Similarity 활용)
✅ PCA를 활용한 벡터 데이터 시각화 및 분석
'Data Engineering > Data Infra & Process' 카테고리의 다른 글
[17편] 대규모 벡터 데이터 최적화 및 비용 절감 전략 (0) | 2025.03.16 |
---|---|
[16편] pgvector + LangChain을 활용한 AI 챗봇 구축 (0) | 2025.03.16 |
[14편] 실시간 스트리밍 데이터와 pgvector 연동 (0) | 2025.03.07 |
[13편] 운영 자동화 (Airflow & Kubernetes) (0) | 2025.03.07 |
[12편] 벡터 검색 성능 최적화 (HNSW & IVFFlat 비교 및 튜닝) (0) | 2025.03.07 |