TL;DR
이 글은 원시 CSV를 파이썬으로 정제하고 pandas 집계와 Matplotlib 차트를 생성한 뒤 Claude Opus 4.8에 요약을 보내 경영진용 보고서를 자동으로 만드는 파이프라인을 제시한다. 실제 사례에서는 총매출 $12,975에서 환불 $4,875가 빠져 순매출 $8,100, 환불율은 38%로 계산되었고 환불 중앙 시차는 20일로 4월 매출이 5월에 환불로 돌아온 점이 포착되었다. LLM은 초안 작성 시간을 크게 줄이나 샘플 크기와 비즈니스 맥락 검증은 인간이 반드시 수행해야 한다는 점을 강조한다.
섹션별 상세
이미지 분석

주별 막대 차트는 2025-04-14~2025-05-19 기간 동안 구매(purchases) 막대가 4월에 높다가 5월에 환불(refunds) 막대가 우세해지는 전환을 시각적으로 드러낸다. 차트의 수치 축과 데이터 라벨이 주간 순(net) 변화를 뒷받침하며 첫 세 주의 양호한 매출이 이후 환불로 뒤집힌 점을 빠르게 확인할 수 있다. 이 시각 증거는 환불 시차과 연결된 매출 감소 원인을 추적하는 데 실무적 우선순위를 제공한다.
주별 구매 대 환불 막대 차트

누적(net) 선형 차트는 기간 초반 급격한 증가가 5월 초 정점에 도달한 뒤 점진적으로 하강하는 추세를 보여준다. 이 누적 곡선은 개별 주의 환불이 누적 성과에 미치는 영향을 한눈에 드러내며, 정점 시점 이후 환불 유입이 지속되어 순매출이 감소했음을 수치적으로 확인시킨다. 의사결정자는 이 시점과 환불 원인 간의 시계열 상관을 추가 조사해야 한다.
누적 순매출 선형 차트

국가별 수평 막대 차트는 미국(US)이 전체 순매출 약 $7,200를 대부분 차지하고 영국(GB)과 멕시코(MX)는 소규모로 약 $450씩 기여하며 캐나다(CA)는 순매출이 0임을 보여준다. 캐나다의 값이 0인 이유는 두 건의 완료 주문이 모두 환불되어 순합이 0이 되었기 때문이며, 이는 지역별 리스크가 국지적으로 집중되어 있음을 시사한다. 이 결과는 시장별 원인 분석과 소규모 표본의 주의를 요구한다.
국가별 순매출 수평 막대 차트

터미널 스크린샷은 모델이 생성한 키 인사이트(순매출 $8,100, 환불율 38%, 시차 중앙값 20일 등)와 권고안 초안을 그대로 캡처한 것이다. 이 이미지는 LLM 초안이 수치 근거에 기반해 신속히 만들어지지만 샘플 크기와 맥락 검증은 사람이 해야 한다는 글의 주장을 시각적으로 뒷받침한다. 운영 관점에서는 모델 초안과 인간 검토를 파이프라인으로 묶는 워크플로우 유효성을 보여준다.
터미널에 출력된 핵심 인사이트와 권고안 스크린샷

HTML 보고서 스냅샷은 카드형으로 요약된 KPI(순매출 $8,100, 총매출 $12,975 등)와 차트, LLM 초안 텍스트를 한 화면에 구성한 최종 산출물의 예를 보여준다. 이 이미지는 파이프라인의 입력(CSV)에서 출력(다운로드 가능한 보고서)까지의 전체 흐름을 확인할 수 있게 해 운영 인수인계와 자동화 적용 시 기대 산출물을 명확히 한다. 또한 보고서 포맷이 경영진 소비용으로 적합한지 판단할 근거를 제공한다.
완성된 HTML 보고서 스냅샷(카드형 KPI와 텍스트)

해당 레이아웃 이미지는 주별 막대 차트와 누적 선형 차트를 함께 배치해 패턴 비교를 용이하게 해준다. 대시보드 형태로 차트를 배치하면 비기술 경영진이 시간 경과와 구성 요소별 기여를 동시에 파악할 수 있어 실무적 전달력이 높아진다. 이러한 레이아웃은 자동 생성 보고서의 가독성과 의사결정 지원 가치를 개선한다.
차트 레이아웃이 포함된 대시보드 스타일 스냅샷
용어 해설
- CSV 기반 자동 보고 파이프라인(CSV reporting pipeline)
- — 원시 CSV 파일을 읽어 결측·상태를 정리하고 집계와 시각화를 생성한 뒤 LLM에 요약을 부탁해 최종 보고서 HTML을 만드는 반복 가능한 파이프라인이다. 이 과정은 데이터 정제 → 집계 계산 → 차트 생성 → LLM 초안 작성 → 결과 조정의 단계로 구성된다.
- 데이터 정제(Data cleaning)
- — 거래 상태(status)로 완료(completed)만 골라내고 날짜와 금액 타입을 변환하며 환불을 음수로 처리하는 등 집계 결과가 정확하도록 원시 행을 필터링하고 형식을 고정하는 단계이다. 정제가 잘못되면 실패한 결제나 미완료 거래가 매출에 포함될 수 있다.
- 환불 고려 순매출(Refund-adjusted revenue)
- — 총 매출(gross)에서 환불(refunds)을 차감한 순매출(net)을 의미하며, 환불은 데이터에 이미 음수로 저장되어 있어 합계를 계산하면 그대로 순매출이 산출된다. 본 글에서는 총 $12,975에서 환불 $4,875를 빼서 순매출 $8,100가 도출되었다.
- 환불 시차(중앙값)(Median refund lag)
- — 원구매 거래(original_transaction_id)에서 환불이 실제로 발생한 날짜까지의 차이를 일수로 계산한 값의 중앙값으로 본 사례에서는 20일로 측정되어 4월 매출이 5월에 환불로 돌아오는 패턴을 설명한다.
- LLM 보조 인사이트 생성(LLM-assisted insights)
- — 정제된 집계와 차트 요약을 짧은 텍스트 프롬프트로 LLM(이 경우 Claude Opus 4.8)에 보내서 경영진용 핵심 통찰과 권고안 초안을 자동 생성하는 절차로, 인간이 검토해 사실과 맥락을 확인한 뒤 최종 문장을 확정한다.
코드 예제
df = pd.read_csv("product_sales.csv")
df["transaction_date"] = pd.to_datetime(df["transaction_date"])
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
settled = df[df["status"] == "completed"].copy()
settled["is_refund"] = settled["type"].eq("refund")이 코드 조각은 원시 CSV를 읽어 날짜와 금액 필드를 적절한 타입으로 변환한 뒤 상태가 'completed'인 행만 남긴다. 환불은 type 컬럼을 통해 식별해 is_refund 불리언 열로 표시하므로 이후 집계에서 환불과 구매를 분리할 수 있다. 이 단계가 정확해야 gross·refunds·net 같은 핵심 지표가 올바르게 계산된다.
weekly = settled.pivot_table(index="week", columns="is_refund", values="amount", aggfunc="sum").fillna(0)
weekly.columns = ["purchases", "refunds"]
weekly["net"] = weekly.sum(axis=1)이 스니펫은 거래일을 주 단위로 묶어 구매와 환불을 열로 분리해 주별 합계를 만든다. 빈값은 0으로 채워 구매·환불이 없는 주를 명확히 처리하며 마지막에 순(net) 열을 더해 주간 순매출을 계산한다. 결과는 주간 패턴 차트와 모델 입력 요약으로 사용된다.
summary = f"Product sales, {settled['transaction_date'].min().date()} to {settled['transaction_date'].max().date()}. Gross: ${gross:,.0f} Refunds: ${-refunds:,.0f} Net: ${net:,.0f} Refund rate by value: {refund_rate:.0%}"
prompt = ("You are a data analyst writing for executives. "
"Based on this summary, write 3 insights and 3 business recommendations.
" + summary)이 코드 조각은 핵심 집계값을 문자열로 포맷해 LLM에 보낼 프롬프트를 구성한다. 모델에 전달되는 것은 집계 요약뿐이라서 원시 행 수준 데이터는 외부로 빠져나가지 않으며, LLM은 이 숫자 요약을 바탕으로 초안 인사이트와 권고안을 생성한다. 생성된 초안은 반드시 사람이 데이터 범위와 샘플 크기를 확인한 뒤 수정해야 한다.
근거 모음
- 총 매출은 $12,975이고 환불은 $4,875로 순매출은 $8,100이며 환불율(value 기준)은 38%이다. — 집계 코드(gross/refunds/net)와 출력 값 'gross 12,975 refunds -4,875 net 8,100 refund rate (value) 38%'
- 주별로는 첫 세 주가 순매출 양수였고 마지막 세 주가 환불로 인해 순손실로 전환되었다. — weekly 피벗 테이블 출력(week purchases refunds net) 및 주별 막대 차트(chart_weekly.png)
- 원구매 대비 환불의 중앙값 시차는 20일로 계산되어 4월 매출의 일부가 5월에 환불로 돌아왔다. — original_transaction_id 매핑 후 계산한 ref['lag_days'].median() 결과(20.0)
기술
- Claude Opus 4.8
- Python
- pandas
- Matplotlib
- HTML 보고서 출력
활용 사례
- 이메일로 들어오는 CSV를 반복적으로 경영진용 보고서로 변환하는 자동화
- 환불 패턴과 시차를 빠르게 탐지해 매출 회계 시점을 조정하는 운영 보조
- 짧은 샘플에서 경영진용 요약과 권고안 초안을 신속히 생성해 리소스 우선순위를 정하는 의사결정 보조
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.