Data Engineering/Data Infra & Process

[15편] AI 모델을 활용한 벡터 데이터 분석

ygtoken 2025. 3. 7. 17:42
728x90

 

이 글에서는 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를 활용한 벡터 데이터 시각화 및 분석

 

728x90