본문 바로가기

Quant

파이썬으로 월별 수익률 리포트 자동 생성하기

반응형

퀀트 투자 전략을 설계하고 백테스트를 하다 보면, 단순히 누적 수익률만 확인해서는 전략의 성과를 충분히 이해하기 어렵습니다.
특히 전략이 월 단위로 얼마나 안정적으로 수익을 냈는지를 확인하려면 '월별 수익률 리포트'가 필수입니다.

많은 퀀트 초보자들이 엑셀로 일일이 계산하거나 전문 툴에 의존하는 경우가 많지만, 파이썬(Python)을 활용하면 한 번의 코드 실행으로 자동화된 월별 리포트를 생성할 수 있습니다.

이번 글에서는 파이썬을 사용해 CSV로 저장된 전략 수익률 데이터를 기반으로 월별 수익률 테이블을 생성하고,
리포트 형태로 보기 좋게 정리하는 방법
을 단계별로 소개하겠습니다.

파이썬 월별 수익률 리포트

 

1. 준비 데이터: 일간 수익률 CSV 파일 불러오기

먼저 기본 데이터는 다음과 같은 형태의 CSV 파일입니다.

📄 strategy_returns.csv (예시):

DATE Return
2025.01.05 0.0042
2025.01.06 -0.0031
... ...

 

각 행은 일별 수익률이며, Return 컬럼은 **전일 대비 수익률 (단위: 소수점)**입니다.
파일을 불러오는 코드는 다음과 같습니다.

import pandas as pd

# CSV 불러오기
df = pd.read_csv("strategy_returns.csv")
df["Date"] = pd.to_datetime(df["Date"])
df = df.sort_values("Date")

정렬까지 완료했으면, 이제 본격적으로 월별 수익률을 계산할 준비가 되었습니다.


2. 월별 수익률 계산 로직 (누적 곱 방식)

일별 수익률을 월 단위로 묶어 그 월의 전체 수익률을 계산하려면 단순 평균이 아닌 '누적 곱(Cumulative Product)' 방식을 사용해야 합니다.

📌 수익률 공식:

(1 + r_1) \times (1 + r_2) \times \dots \times (1 + r_n) - 1

아래는 월별 수익률을 계산하는 함수입니다.

def calculate_monthly_returns(df):
    df["YearMonth"] = df["Date"].dt.to_period("M")  # '2022-01', '2022-02' 형태

    monthly_returns = (
        df.groupby("YearMonth")["Return"]
        .apply(lambda x: (x + 1).prod() - 1)  # 누적 곱 방식으로 계산
        .reset_index()
    )
    monthly_returns["YearMonth"] = monthly_returns["YearMonth"].astype(str)
    return monthly_returns

실행:

monthly = calculate_monthly_returns(df)
print(monthly.head())

이제 각 월의 수익률을 계산했으니, 보기 좋게 표로 구성해봅시다.


3. 월별 수익률 피벗 테이블 형태로 보기 좋게 정리

실전에서는 전략의 성과를 연도별/월별 매트릭스 테이블 형태로 보고 싶을 때가 많습니다.
예: 연도는 행, 월은 열 이를 위해 다음과 같은 피벗 테이블을 생성합니다.

# 연도, 월 분리
monthly["Year"] = monthly["YearMonth"].str.slice(0, 4)
monthly["Month"] = monthly["YearMonth"].str.slice(5, 7)

# 월별 수익률 테이블 생성
pivot_table = monthly.pivot(index="Year", columns="Month", values="Return")

# 보기 좋게 소수점 퍼센트로 변환
pivot_table = pivot_table.applymap(lambda x: "{0:.2%}".format(x) if pd.notnull(x) else "")
print(pivot_table)

 

출력 예시 :

Year 01 02 03 ... 12
2024 3.24% -1.52% 1.10% ... 5.10%
2025 1.92% 0.83% -0.50% ... 2.15%

이렇게 정리하면
특정 연도의 어떤 달에 전략이 강했는지, 약했는지를 한눈에 파악할 수 있습니다.


4. 추가 기능: 수익률 평균, 변동성, 누적 수익률 표시

마지막으로 아래와 같은 정보를 요약해 표시하면 퀀트 전략 리포트로 바로 활용할 수 있는 수준이 됩니다.

# 연도별 누적 수익률
yearly_returns = (
    df.groupby(df["Date"].dt.year)["Return"]
    .apply(lambda x: (x + 1).prod() - 1)
)

# 연도별 평균 수익률, 표준편차
yearly_mean = df.groupby(df["Date"].dt.year)["Return"].mean()
yearly_std = df.groupby(df["Date"].dt.year)["Return"].std()

# 출력
report = pd.DataFrame({
    "연도별 누적 수익률": yearly_returns,
    "연도별 평균 일 수익률": yearly_mean,
    "일간 수익률 표준편차": yearly_std
}).applymap(lambda x: "{0:.2%}".format(x))

print(report)

이 출력값은 전략 설명서에 그대로 붙여 넣어도 손색없을 정도로 정돈된 리포트입니다.
모든 작업은 코드 한 번 실행으로 자동 생성되기 때문에 매월 또는 전략별로 리포트를 만들 때 매우 효율적입니다.


✅ 마무리 – 퀀트 전략 리포트는 자동화로 완성된다

퀀트 전략을 실제로 운영하고 비교하려면, 단순히 백테스트 결과 그래프만 봐서는 부족합니다.
월별 수익률, 변동성, 손실 구간 등을 수치로 보여주는 정형화된 리포트가 꼭 필요합니다.

이번 글에서 소개한 방법은 기존의 엑셀 수작업 방식보다 훨씬 빠르고 정확하며,
파이썬을 이용해 누구나 쉽게 자동화할 수 있는 실전 활용 기법입니다.

이제 퀀트 전략을 하나 만들 때마다 **“한 줄 코드 실행 = 전략 리포트 자동 완성”**이라는 루틴을 구축해보세요.

👉 다음 글에서는 이 월별 리포트를 PDF로 자동 변환해 저장하는 방법도 함께 소개드리겠습니다.