Pandas & NumPy Academy · Ders

Analiz ve KPI Hesaplama

groupby, pivot ve rolling kullanarak aylık kohort elde tutma oranını, ürün düzeyinde geliri ve son 30 gündeki etkin kullanıcıları hesaplayın.

3. ders / 413 adım

Analiz ve KPI Hesaplama, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

Analize Hazır Verileri Yükleme

Temizleme ve özellik mühendisliği tamamlandığında analysis_ready.parquet kontrol noktasını yükleyin ve KPI'ları hesaplamaya başlayın. Bu aşama yalnızca analizden oluşur; artık veri temizleme yapılmaz. Temiz ve doğrulanmış bir kontrol noktasının bulunması, zaman alan veri alma ve temizleme aşamalarını yeniden çalıştırmadan KPI tanımları üzerinde hızlıca yineleme yapmanızı sağlar. Hesaplanacak üç KPI şunlardır: aylık kohort elde tutma, kategoriye göre ürün düzeyinde gelir ve 30 günlük kayan etkin kullanıcı sayısı.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')
print(f'Loaded: {df.shape}')
print('KPIs to compute:')
print('  1. Monthly cohort retention matrix')
print('  2. Category revenue and margin ranking')
print('  3. Rolling 30-day active users per region')

KPI 1: Kategoriye Göre Aylık Gelir

İlk KPI kategoriye göre aylık gelirdir. Hem year_month hem de category alanına göre gruplayın, geliri toplayın ve kategorileri sütun, ayları satır olarak elde etmek için pivotlayın. Bu pivot tablosu, rapordaki eğilim çizgisi grafiğinin ve en iyi kategorileri gösteren çubuk grafiğinin temelidir. Eğilimi yumuşatmak ve mevsimselliği öne çıkarmak için 3 aylık kayan ortalama uygulayın.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')

# Monthly revenue by category
monthly_cat = (
    df.groupby(['year_month', 'category'])['revenue']
    .sum()
    .reset_index()
    .pivot(index='year_month', columns='category', values='revenue')
    .fillna(0)
    .sort_index()
)

# 3-month rolling average
monthly_cat_smooth = monthly_cat.rolling(3, min_periods=1).mean()

print('Monthly revenue by category (head):')
print(monthly_cat.round(0).head())
print('Shape:', monthly_cat.shape)

KPI 2: Toplam Gelire Göre En İyi Bölgeler

Bölgeleri tüm dönem boyunca elde edilen toplam gelire göre sıralayın. Birden çok istatistiği aynı anda hesaplamak için groupby().agg() kullanın: toplam gelir, sipariş sayısı, benzersiz müşteri sayısı ve ortalama sipariş değeri. Toplam gelire göre azalan sırada sıralayın ve ilk 10 bölgeyi alın. Her bölgenin toplam gelire oranla gelir payını hesaplayın; bu, yoğunlaşma riskini ortaya çıkarır (gelirin %80'i tek bir bölgeden geliyorsa işletme coğrafi açıdan risk altındadır).

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')

region_kpi = (
    df.groupby('region')
    .agg(
        total_revenue=('revenue', 'sum'),
        order_count=('order_id', 'nunique'),
        unique_customers=('customer_id', 'nunique'),
        avg_order_value=('revenue', 'mean')
    )
    .reset_index()
    .sort_values('total_revenue', ascending=False)
)

total = region_kpi['total_revenue'].sum()
region_kpi['revenue_share'] = (region_kpi['total_revenue'] / total).round(3)

print(region_kpi.head(10).to_string(index=False))

KPI 3: Kohort Elde Tutma Matrisi

Kohort elde tutma matrisi, her edinim kohortundaki müşterilerin sonraki her dönemde en az bir satın alma yapan yüzdesini gösterir. Bunu üç adımda hesaplayın: (1) her siparişe, müşterinin kohort ayından bu yana geçen ay sayısına eşit bir 'dönem numarası' atayın; (2) kohort ve dönem numarasına göre groupby yapıp benzersiz müşterileri sayın; (3) elde tutma oranlarını bulmak için bu sayıyı kohort büyüklüğüne (dönem 0 sayısına) bölün. Kohort × dönem biçimine pivotlayın.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')

# Compute months since cohort start
df['cohort_period'] = (
    (df['order_date'].dt.to_period('M') -
     pd.PeriodIndex(df['cohort_month'], freq='M'))
    .apply(lambda x: x.n)
)

cohort_data = (
    df.groupby(['cohort_month', 'cohort_period'])['customer_id']
    .nunique()
    .reset_index()
    .rename(columns={'customer_id': 'customers'})
)

# Pivot: rows=cohort, columns=period
cohort_pivot = cohort_data.pivot(
    index='cohort_month', columns='cohort_period', values='customers'
)

cohort_sizes = cohort_pivot[0]
retention = cohort_pivot.divide(cohort_sizes, axis=0).round(3)
print('Retention matrix (first 3 cohorts):')
print(retention.head(3))

KPI 4: 30 Günlük Kayan Etkin Kullanıcı Sayısı

Günlük Etkin Kullanıcılar (DAU) ve kayan pencere çeşitleri temel ürün KPI'larıdır. Herhangi bir 30 günlük pencerede satın alma yapan benzersiz müşteri sayısını hesaplayın. Önce günlük benzersiz alıcıları hesaplayın, tarihi dizin olarak ayarlayın ve ardından rolling('30D').apply(lambda x: x.nunique()) uygulayın; ancak rolling işleminin DatetimeIndex üzerinde belirli bir toplulaştırma gerektirdiğine dikkat edin. Alternatif olarak özel bir pencere işleviyle kümeye dayalı kayan benzersiz sayım kullanabilirsiniz.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')

# Daily unique purchasers
daily = (
    df.groupby('order_date')['customer_id']
    .nunique()
    .reset_index()
    .rename(columns={'customer_id': 'daily_unique_customers'})
    .set_index('order_date')
    .sort_index()
)

# 30-day rolling sum (approximation: sum of daily unique purchasers)
# True rolling unique requires custom logic
daily['rolling_30d'] = daily['daily_unique_customers'].rolling('30D').sum()

print('Rolling 30-day active customers:')
print(daily.tail())

Ürün Düzeyinde Gelir Sıralaması

Ürün düzeyinde analiz için tüm ürün kimliklerini toplam gelire göre sıralayın ve kümülatif gelir paylarını hesaplayın. Bu, gelirin Pareto dağılımını izleyip izlemediğini ortaya çıkarır (yaygın bir bulgu şudur: ürünlerin yaklaşık %20'si gelirin yaklaşık %80'ini oluşturur). Kümülatif gelir sütununu .cumsum() ile hesaplayın ve kümülatif payın %80'i aştığı eşik ürün sayısını bulun. Bu analiz, ürün portföyünün önceliklendirilmesine ilişkin kararlara yön verir.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')

product_rev = (
    df.groupby('product_id')['revenue']
    .sum()
    .sort_values(ascending=False)
    .reset_index()
)

total_rev = product_rev['revenue'].sum()
product_rev['rev_share'] = product_rev['revenue'] / total_rev
product_rev['cumulative_share'] = product_rev['rev_share'].cumsum()

pct80_cutoff = (product_rev['cumulative_share'] <= 0.80).sum()
total_products = len(product_rev)
print(f'Top {pct80_cutoff} of {total_products} products ({pct80_cutoff/total_products:.0%}) '
      f'generate 80% of revenue (Pareto)')
print(product_rev.head())

Tüm KPI Tablolarını Kaydetme

Her KPI tablosunu çıktı dizininde adlandırılmış bir Parquet dosyasına kaydedin. Adlandırma kuralı: kpi_{name}.parquet. Böylece görselleştirme aşaması kolaylaşır; gereken önceden hesaplanmış tabloyu doğrudan okur ve hiçbir şeyi yeniden hesaplamaz. Ayrıca teknik olmayan ve Excel'de açabilecek paydaşlarla kolayca paylaşılabilmesi için birleştirilmiş KPI özetini CSV olarak kaydedin.

import pandas as pd

# Save all KPI tables
monthly_cat.to_parquet('output/kpi_monthly_category_revenue.parquet')
region_kpi.to_parquet('output/kpi_region_summary.parquet', index=False)
retention.to_parquet('output/kpi_cohort_retention.parquet')
daily.to_parquet('output/kpi_rolling_active_users.parquet')
product_rev.to_parquet('output/kpi_product_ranking.parquet', index=False)

# Also a CSV summary for sharing
region_kpi.to_csv('output/region_summary.csv', index=False)

print('All KPI tables saved:')
print('  kpi_monthly_category_revenue.parquet')
print('  kpi_region_summary.parquet')
print('  kpi_cohort_retention.parquet')
print('  kpi_rolling_active_users.parquet')
print('  kpi_product_ranking.parquet')

KPI'ların İstatistiksel Doğrulaması

KPI'ları kesinleştirmeden önce istatistiksel denetimler gerçekleştirin: aylık gelir artışının sıfır büyümeye karşı tek örneklemli t sınaması kullanılarak istatistiksel açıdan anlamlı olup olmadığını sınayın ve bölge gelirleri arasındaki farkların tek yönlü ANOVA kullanılarak anlamlı olup olmadığını denetleyin. 'Gelire göre en iyi bölge' ifadesi, farkın rastgele değişkenlikten kaynaklanma olasılığının düşük olduğunu doğrulayabildiğinizde daha anlamlı olur. p değerlerini meta veri sütunları olarak KPI tablolarına ekleyin.

import pandas as pd
import numpy as np
from scipy import stats

df = pd.read_parquet('output/analysis_ready.parquet')

# Is revenue growth statistically significant?
monthly_total = df.groupby('year_month')['revenue'].sum().sort_index()
month_changes = monthly_total.diff().dropna()
stat, p = stats.ttest_1samp(month_changes, popmean=0)
print(f'Monthly growth test: mean={month_changes.mean():.0f}, p={p:.4f}')
print('Significant positive trend?', month_changes.mean() > 0 and p < 0.05)

# ANOVA: do regions differ significantly?
groups = [g['revenue'].values for _, g in df.groupby('region')]
f, p_anova = stats.f_oneway(*groups)
print(f'Region ANOVA: F={f:.3f}, p={p_anova:.4f}')

Aydan Aya Büyüme Oranını Hesaplama

Aydan aya (MoM) büyüme oranı temel bir işletme KPI'ıdır: growth = (current - previous) / previous × 100. Temiz bir hesaplama için pct_change() kullanın. MoM büyümesinin 3 aylık hareketli ortalaması, aylık dalgalanmaları yumuşatarak temel eğilimi ortaya çıkarır. Negatif büyüme oranlarını da pozitifler kadar öne çıkarmak önemlidir; bunlar araştırılması gereken dönemlere işaret eder.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')

monthly_total = (
    df.groupby('year_month')['revenue'].sum().sort_index()
)

growth = monthly_total.pct_change() * 100
trend = growth.rolling(3, min_periods=1).mean()

kpi_growth = pd.DataFrame({
    'revenue': monthly_total,
    'mom_growth_pct': growth.round(2),
    'trend_3m_avg': trend.round(2)
})

print(kpi_growth.tail(6))
print(f'\nBest month: {monthly_total.idxmax()} (${monthly_total.max():,.0f})')
print(f'Worst month: {monthly_total.idxmin()} (${monthly_total.min():,.0f})')

Otomatik Anomali Tespiti

Anormal ayları otomatik olarak işaretleyin: gelirin, geriye dönük 6 aylık ortalamadan 2 standart sapmadan fazla uzak olduğu aylar. Bunlar araştırılmaya değerdir; gerçek işletme olaylarını (başarılı bir kampanya veya veri kesintisi) ya da veri kalitesi sorunlarını (verilerin iki kez yüklenmesi) yansıtabilir. Anomali tespiti, otomatik iş akışı panolarına değerli bir katkıdır ve analistlerin araştırmalarını en önemli dönemlere odaklamasına yardımcı olur.

import pandas as pd
import numpy as np

df = pd.read_parquet('output/analysis_ready.parquet')
monthly = df.groupby('year_month')['revenue'].sum().sort_index()

rolling_mean = monthly.rolling(6, min_periods=3).mean()
rolling_std = monthly.rolling(6, min_periods=3).std()

anomalies = monthly[
    (monthly > rolling_mean + 2 * rolling_std) |
    (monthly < rolling_mean - 2 * rolling_std)
]
print('Anomalous months (>2 std from 6-month rolling mean):')
if len(anomalies) > 0:
    print(anomalies.round(0))
else:
    print('None detected')

KPI Özet Tablosu

Tüm KPI'lardaki üst düzey değerleri birleştiren tek bir yönetici özeti tablosu derleyin: toplam gelir, toplam sipariş sayısı, benzersiz müşteri sayısı, ortalama sipariş değeri, en iyi bölge, en iyi kategori ve 3. aydaki ortalama 30 günlük kohort elde tutma oranı. Bu tek tabloluk özet, raporun ilk sayfasıdır; paydaşlara grafiklere ve ayrıntılı tablolara geçmeden önce hızlı bir genel görünüm sunar.

import pandas as pd

df = pd.read_parquet('output/analysis_ready.parquet')
retention = pd.read_parquet('output/kpi_cohort_retention.parquet')
region_kpi = pd.read_parquet('output/kpi_region_summary.parquet')

summary = {
    'Total Revenue': f'${df["revenue"].sum():,.0f}',
    'Total Orders': f'{df["order_id"].nunique():,}',
    'Unique Customers': f'{df["customer_id"].nunique():,}',
    'Avg Order Value': f'${df["revenue"].mean():.2f}',
    'Best Region': region_kpi.iloc[0]["region"],
    'Best Category': df.groupby("category")["revenue"].sum().idxmax(),
    'Avg Month-3 Retention': f'{retention.get(3, pd.Series([0])).mean():.1%}'
}

for k, v in summary.items():
    print(f'{k:25s}: {v}')

Kısa Denetim

Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: groupby + pivot, aylık kategori gelir matrisini ve kohort elde tutma tablosunu oluşturur; rolling(), yumuşatılmış eğilimleri ve 30 günlük etkin kullanıcı yaklaşımlarını hesaplar; istatistiksel doğrulama (büyüme için t sınaması, bölge farkları için ANOVA), KPI anlatımına güvenilirlik kazandırır. Sırada tüm sonuçları çok panelli bir şekilde görselleştirmek ve nihai raporu dışa aktarmak var.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Analiz ve KPI Hesaplama” dersi ücretsiz mi?

Evet — “Analiz ve KPI Hesaplama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Analiz ve KPI Hesaplama” dersinde ne öğreneceğim?

groupby, pivot ve rolling kullanarak aylık kohort elde tutma oranını, ürün düzeyinde geliri ve son 30 gündeki etkin kullanıcıları hesaplayın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Analiz ve KPI Hesaplama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Proje Kurulumu ve Veri Alma
  2. Veri Temizleme ve Özellik Mühendisliği
  3. Analiz ve KPI Hesaplama
  4. Son Görselleştirme ve Rapor Dışa Aktarma
← Pandas & NumPy Academy Sayfasına Dön