Phase 4 · AI 및 자연어 처리

숫자는 파이썬이 계산하고, 설명은 AI가 씁니다

"이 거래가 이상한지 판단해줘"는 AI에게 너무 많은 책임을 떠넘기는 것입니다.
"Python이 통계적으로 Z-score 4.8 이상치를 찾았어. 너는 이 수치를 근거로 회계사가 검토할 체크리스트와 이유를 글로 써줘."
이것이 진정한 파이썬과 AI의 결합입니다.

예상 학습 시간 : 150분
난이도 : ★★★★★
사전 단계 : 통계 기반 이상치 탐지 (Step 14)
다음 단계 : 챗봇 연동 데이터 분석 (예정)
01

최적의 역할 분담: 계산(Python) + 요약(AI) + 판단(사람)

10만 건의 전표를 AI에게 통째로 넘기면 엄청난 비용과 시간이 들고 엉뚱한 결론을 낼 위험이 큽니다. 올바른 실무 파이프라인은 다음과 같습니다.

1. Python (수집·계산·필터링)

전표 10만 건을 클리닝하고 통계 분석(Z-score 등)을 돌려 문제가 의심되는 500건만 정확히 추출해냅니다.

2. AI / LLM (설명·요약)

Python이 찾은 500건의 수치를 전달받아 "왜 통계적으로 이상한지", "어떤 증빙(계약서, 세금계산서)을 확인해야 하는지"를 글로 풀어냅니다.

3. 회계전문가 (최종 판단)

AI가 작성한 검토 보고서를 읽고, 진짜 오류 기장인지 정상적인 일시적 고액 거래인지 최종 승인합니다.

02

회계 분석을 위한 프롬프트 엔지니어링

파이썬 변수를 f-string 포맷팅을 통해 동적으로 프롬프트에 주입(Injection)합니다.

📝 Python 프롬프트 생성
# Python으로 추출한 거래 데이터
data = {
    "거래처": "ABC상사",
    "금액": 185000000,
    "평균": 12000000,
    "Z_score": 4.82
}

# 역할, 데이터, 목적, 출력형식, 주의사항을 완벽히 분리한 프롬프트
prompt = f"""
당신은 회계자료 검토 보조 AI입니다.

[데이터]
거래처: {data['거래처']}
거래금액: {data['금액']:,}
평균거래액: {data['평균']:,}
Z-score: {data['Z_score']}

[목적 및 형식]
위 통계적 이상 거래에 대해 다음 4가지를 작성하십시오.
1. 이상징후 설명
2. 검토 체크포인트
3. 확인할 필수 증빙자료 목록

[주의]
거래 오류라고 단정 짓지 마십시오. 제공된 데이터 수치만을 근거로 작성하십시오.
"""
🤖 AI 응답 예시: 1. 이상징후 설명 해당 거래금액(1억 8,500만 원)은 거래처의 평균 거래금액(1,200만 원) 대비 약 15배 현저히 높은 수준이며, Z-score가 4.82로 나타나 평소 거래 패턴에서 크게 벗어난 통계적 특이 거래로 분류됩니다. 2. 검토 체크포인트 - 해당 고액 거래를 뒷받침하는 신규 계약 체결 여부 - 동일 거래의 이중 기장(중복 입력) 여부 - 회계기간 귀속의 적정성 확인 3. 확인할 필수 증빙자료 목록 - 품의서 및 원본 계약서 - 국세청 발행 세금계산서 - 통장 입출금 내역서 (실제 대금 수수 여부)
03

로컬 AI (Ollama) 호출하기

회계 전표는 민감한 정보입니다. 외부 OpenAI API 대신, 회사 PC 내부에서만 작동하는 로컬 LLM (Ollama)을 호출하는 방법이 보안상 훨씬 훌륭한 선택입니다.

import requests

def analyze_with_ai(prompt_text):
    url = "http://localhost:11434/api/generate" # 내 PC의 Ollama 주소
    
    payload = {
        "model": "gemma3:4b",  # 사용할 로컬 언어모델
        "prompt": prompt_text,
        "stream": False
    }
    
    # AI 서버에 요청을 보내고 응답을 기다림
    response = requests.post(url, json=payload)
    result = response.json()
    
    return result["response"]
OpenAI(ChatGPT)를 쓸 거라면?

만약 보안상 문제가 없는 더미 데이터를 사용해 OpenAI API를 쓴다면, 절대 코드에 api_key = "sk-..." 를 박아두면 안 됩니다. os.getenv("OPENAI_API_KEY") 를 이용해 환경변수로 불러오는 것이 보안의 기본입니다.

04

결과를 JSON으로 구조화하기

자연어 줄글로 받으면 파이썬이 "그래서 이게 고위험이라는 거야?"라고 판별하기 어렵습니다. 프롬프트에 "결과를 무조건 JSON 형식으로만 내놓아라"라고 지시하여 엑셀 컬럼에 쏙쏙 박히게 만듭니다.

# 프롬프트 끝에 JSON 스키마를 강제함
prompt += """
반드시 아래 JSON 형식으로만 출력하십시오. 다른 인사말은 출력하지 마십시오.
{
  "위험도": "HIGH 또는 MEDIUM",
  "한줄요약": "이 거래가 왜 이상한지 1문장 요약",
  "필요증빙": ["계약서", "명세서" ...]
}
"""
05

데이터 익명화 (개인정보 최소화)

만약 외부 API를 쓴다면, 진짜 거래처 이름이나 사업자번호를 넘기면 안 됩니다. 파이썬 단에서 치환을 거칩니다.

# '삼성전자' -> '거래처_1' 처럼 익명화하여 AI에 전달
df["거래처_익명"] = "Company_" + (df.index + 1).astype(str)

# AI가 리포트를 완성하면 엑셀에 저장할 땐 원래 거래처명 옆에 붙여주기만 하면 됨!
06

최종 실무: AI 회계자료 검토 자동화 시스템

14단계에서 뽑아낸 수십 건의 review_data(검토 대상)를 for문으로 돌리며 AI에게 물어보고 결과를 엑셀로 출력하는 파이프라인입니다.

Ultimate Pipeline
Python + 통계 + LLM 하이브리드 검증기
import pandas as pd
import requests
import json
import time

# 1. 14단계에서 뽑아낸 [검토대상] DataFrame이라 가정
review_df = pd.read_excel("통계기반_이상거래분석.xlsx", sheet_name="🚨위험우선순위")

def ask_ai(row):
    # 프롬프트 생성
    p = f"""이 거래가 통계적으로 왜 이상한지 분석해. JSON으로만 답해.
금액:{row['공급가액']}, 거래처평균:{row['거래처평균']}, Z점수:{row['거래처_Z']}
{{ "요약": "...", "필요증빙": "..." }}
"""
    try:
        res = requests.post("http://localhost:11434/api/generate", 
                            json={"model": "gemma3:4b", "prompt": p, "stream": False})
        ai_text = res.json()["response"]
        # AI가 준 JSON 텍스트를 파이썬 딕셔너리로 변환
        parsed = json.loads(ai_text)
        return parsed["요약"], parsed["필요증빙"]
    except:
        return "분석 실패", "-"

print(f"총 {len(review_df)}건의 위험 데이터를 AI에게 분석 요청합니다...")

# 2. DataFrame을 순회하며 빈 컬럼 채우기
ai_summaries = []
ai_docs = []

for idx, row in review_df.iterrows():
    summ, doc = ask_ai(row)
    ai_summaries.append(summ)
    ai_docs.append(doc)
    time.sleep(0.5) # AI 서버 과부하 방지 딜레이

review_df["AI_이상사유요약"] = ai_summaries
review_df["AI_추천증빙"] = ai_docs

# 3. 엑셀로 최종 저장
review_df.to_excel("최종_AI보고서.xlsx", index=False)
print("🎉 AI 분석이 완료되어 엑셀 리포트가 생성되었습니다!")
16단계 예고: 자연어 기반 회계 데이터 질의응답

15단계에서는 AI가 정해진 포맷으로 글을 쓰게 만들었습니다. 16단계에서는 한 발 더 나아가 "AI와 대화하며 데이터를 분석하는 챗봇 시스템"을 만듭니다.

"올해 매출이 전년 대비 30% 이상 뛴 거래처만 뽑아서 원인 좀 분석해줘" 라고 자연어로 치면, AI가 알아서 Python Pandas 코드를 짜고(또는 SQL을 날려) 정답을 화면에 띄워주는 RAG 기반 분석 시스템을 배웁니다.