Pandas & NumPy Academy · Lekcja

Tabela retencji kohort

Zbuduj macierz retencji kohort pokazującą odsetek użytkowników z tygodnia 0, którzy pozostają aktywni w kolejnych tygodniach, korzystając z pivot_table.

Lekcja 3 z 413 kroki

Tabela retencji kohort to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Czym jest kohortowa tabela retencji?

Kohortowa tabela retencji grupuje użytkowników według tygodnia (lub miesiąca), w którym po raz pierwszy skorzystali z produktu, a następnie śledzi, jaki odsetek każdej kohorty pozostaje aktywny w kolejnych tygodniach. Wiersz 0 zawsze pokazuje 100 %, ponieważ tydzień 0 oznacza tydzień rejestracji. Wartości w późniejszych kolumnach pokazują, jak szybko produkt traci użytkowników — im wolniejszy spadek, tym silniejsza retencja.

import pandas as pd

df = pd.read_csv('user_events.csv', parse_dates=['event_date'])
print(df.dtypes)
print(df.head())

Przypisywanie każdemu użytkownikowi tygodnia kohorty

Tydzień kohorty to tydzień pierwszego zdarzenia danego użytkownika. Użyj groupby('user_id')['event_date'].min(), aby znaleźć datę pierwszego zdarzenia każdego użytkownika, a następnie przekonwertuj ją na tydzień ISO za pomocą .dt.to_period('W'). Dołącz tę etykietę kohorty z powrotem do głównego obiektu DataFrame zdarzeń, aby każdy wiersz zawierał informację, do którego tygodnia kohorty należy jego użytkownik.

cohort_week = df.groupby('user_id')['event_date'].min().dt.to_period('W').rename('cohort_week')
df = df.join(cohort_week, on='user_id')

df['event_week'] = df['event_date'].dt.to_period('W')

print(df[['user_id', 'event_date', 'cohort_week', 'event_week']].head())

Obliczanie numeru tygodnia od momentu utworzenia kohorty

Numer tygodnia (nazywany także numerem okresu lub wiekiem) to różnica między tygodniem zdarzenia a tygodniem kohorty. Odejmowanie obiektów typu Pandas Period zwraca całkowite przesunięcie. Tydzień 0 oznacza, że użytkownik był aktywny w tygodniu rejestracji, a tydzień 4 — że wrócił cztery tygodnie później. Ta kolumna z przesunięciem staje się osią kolumn macierzy retencji.

df['week_number'] = (df['event_week'] - df['cohort_week']).apply(lambda x: x.n)

print(df[['user_id', 'cohort_week', 'event_week', 'week_number']].head(10))

Zliczanie aktywnych użytkowników dla par kohorta–tydzień

Grupuj dane jednocześnie według cohort_week i week_number, a następnie zliczaj unikalnych użytkowników, aby otrzymać macierz surowych wartości retencji. Każda komórka informuje, ilu użytkowników z kohorty C było aktywnych w tygodniu N. Przekątna od lewego górnego do prawego dolnego rogu (tydzień 0 dla każdej kohorty) zawiera liczebności kohort, które są mianownikami używanymi do obliczania wartości procentowych.

retention_counts = (
    df.groupby(['cohort_week', 'week_number'])['user_id']
    .nunique()
    .reset_index(name='active_users')
)

print(retention_counts.head(10))

Tworzenie macierzy retencji za pomocą tabeli przestawnej

Użyj pivot_table(), aby przekształcić wartości retencji w długim formacie w szeroką macierz: wiersze oznaczają tygodnie kohort, a kolumny — numery tygodni. aggfunc='sum' obsługuje ewentualne zduplikowane klucze grupowania. Wypełnij komórki wartością 0 dla tygodni, w których żaden użytkownik z danej kohorty nie był aktywny. Ta macierz stanowi podstawę analizy retencji.

retention_matrix = retention_counts.pivot_table(
    index='cohort_week',
    columns='week_number',
    values='active_users',
    aggfunc='sum'
).fillna(0)

print(retention_matrix.iloc[:5, :8])

Obliczanie wartości procentowych retencji

Podziel każdy wiersz przez jego wartość z tygodnia 0, aby przekształcić liczności w wartości procentowe. Kolumna tygodnia 0 zawiera liczebność kohorty, przechowywaną w retention_matrix[0]. Użyj divide(cohort_sizes, axis=0), a następnie pomnóż wynik przez 100. Zaokrąglij wartości do jednego miejsca po przecinku, aby zwiększyć czytelność. Otrzymasz standardową mapę cieplną retencji stosowaną w raportach analityki produktu.

cohort_sizes = retention_matrix[0]
retention_pct = retention_matrix.divide(cohort_sizes, axis=0) * 100
retention_pct = retention_pct.round(1)

print(retention_pct.iloc[:5, :8])

Interpretowanie krzywej retencji

Tabelę retencji odczytuje się po przekątnej: każdy wiersz maleje w czasie. Produkt o silnej retencji będzie miał wartości takie jak 100, 60, 50, 45, 42 — szybki początkowy spadek, po którym następuje stabilne wypłaszczenie. Produkt o słabej retencji będzie wykazywał wartości 100, 30, 15, 8, 4 — ciągły spadek bez wypłaszczenia. Poziom wypłaszczenia (jeśli występuje) nazywa się długoterminowym współczynnikiem retencji i jest najważniejszym KPI retencji.

# Average retention rate per week number across all cohorts
avg_retention = retention_pct.mean(axis=0)
print('Average retention by week:')
print(avg_retention.round(1))

Identyfikowanie najlepszych i najsłabszych kohort

Porównuj wyniki kohort, analizując retencję w 4. lub 8. tygodniu. Kohorta z najwyższą retencją w 4. tygodniu skorzystała na ulepszeniu produktu lub skutecznym kanale pozyskiwania; najsłabsza kohorta mogła zostać pozyskana za pośrednictwem kanału niskiej jakości. Użyj .loc[:, 4].sort_values(ascending=False), aby uszeregować kohorty według retencji w 4. tygodniu.

if 4 in retention_pct.columns:
    week4 = retention_pct[4].sort_values(ascending=False)
    print('Cohorts ranked by week-4 retention:')
    print(week4)

Wizualizowanie retencji za pomocą mapy cieplnej

Mapa cieplna z kodowaniem kolorami jest standardową wizualizacją tabel retencji. Użyj sns.heatmap() z annot=True, aby wyświetlić wartość procentową wewnątrz każdej komórki, oraz rozbieżnej mapy kolorów (niska retencja = czerwony, wysoka = zielony). Ustaw vmin=0 i vmax=100, aby kolory można było porównywać między różnymi skalami retencji.

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(14, 6))
sns.heatmap(retention_pct.iloc[:, :13],
            annot=True, fmt='.0f',
            cmap='RdYlGn', vmin=0, vmax=100,
            ax=ax, linewidths=0.5)
ax.set_title('Weekly Cohort Retention (%)')
ax.set_xlabel('Week Number')
ax.set_ylabel('Cohort Week')
plt.tight_layout()
plt.show()

Rysowanie krzywej retencji

Wykres liniowy przedstawiający średnią retencję w poszczególnych tygodniach wyraźniej niż mapa cieplna pokazuje ogólną krzywą spadku podczas prezentacji dla odbiorców nietechnicznych. Narysuj średnią krzywą retencji z zacienionym pasmem oznaczającym plus lub minus jedno odchylenie standardowe, aby pokazać skalę różnic między kohortami. Wypłaszczenie — miejsce, w którym linia przestaje spadać — stanowi naturalny poziom retencji produktu.

avg_ret = retention_pct.mean(axis=0)
std_ret = retention_pct.std(axis=0)

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(avg_ret.index, avg_ret.values, color='steelblue', linewidth=2, marker='o')
ax.fill_between(avg_ret.index, avg_ret - std_ret, avg_ret + std_ret, alpha=0.2)
ax.set_xlabel('Week Number')
ax.set_ylabel('Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()

Eksportowanie tabeli retencji

Wyeksportuj tabelę retencji do programu Excel, aby menedżerowie produktu mogli udostępniać ją podczas cotygodniowych przeglądów. Użyj to_excel() i zastosuj formatowanie warunkowe ręcznie w Excelu albo użyj w Pandas Styler.background_gradient(), aby dodać kolory bezpośrednio do eksportowanego pliku. Tabela retencji jest jednym z najczęściej wymaganych wyników analityki produktu.

styled = retention_pct.style.background_gradient(cmap='RdYlGn', vmin=0, vmax=100)
styled.to_excel('retention_table.xlsx', engine='openpyxl')
print('Retention table saved to retention_table.xlsx')

Szybkie sprawdzenie

Sprawdź swoją znajomość zagadnień analizy danych z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyłeś się: przypisywać użytkowników do tygodni kohort i obliczać przesunięcia tygodniowe, przekształcać dane w macierz retencji i zamieniać liczności na wartości procentowe, a także wizualizować retencję kohort za pomocą mapy cieplnej i średniej krzywej retencji. Następnie omówimy wizualizowanie ścieżek użytkowników za pomocą wykresów słupkowych lejka i map cieplnych.

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Tabela retencji kohort” jest bezpłatna?

Tak — pełny tekst „Tabela retencji kohort” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Tabela retencji kohort”?

Zbuduj macierz retencji kohort pokazującą odsetek użytkowników z tygodnia 0, którzy pozostają aktywni w kolejnych tygodniach, korzystając z pivot_table. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Tabela retencji kohort”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie sesji i sekwencjonowanie zdarzeń
  2. Analiza lejka
  3. Tabela retencji kohort
  4. Wizualizacja ścieżek użytkowników
← Powrót do Pandas & NumPy Academy