Pandas Nutzerverhaltensanalyse in Aktion

Die Analyse des Nutzerverhaltens ist eine wichtige Grundlage für die Produktoptimierung. Dieser Fall zeigt, wie man Nutzerzugriffe, Retention, Konversion und andere Verhaltensdaten analysiert.


Datenvorbereitung

Nutzerverhaltensdaten simulieren

Beispiel

import pandas as pd
import numpy as np

np.random.seed(42)
n_users = 500
n_events = 5000

# Grundlegende Nutzerinformationen
users = pd.DataFrame({
    "User ID": range(1, n_users + 1),
    "Registration Date": pd.date_range("2024-01-01", periods=n_users, freq="D")[:n_users],
    "Channel": np.random.choice(["Organic Search", "Advertising", "Empfehlung", "Social"], n_users),
    "Gerät": np.random.choice(["PC", "Mobil", "Tablet"], n_users, p=[0.3, 0.6, 0.1])
})

# Ereignisse zum Nutzerverhalten
events = pd.DataFrame({
    "Ereignis-ID": range(1, n_events + 1),
    "Benutzer-ID": np.random.randint(1, n_users + 1, n_events),
    "Ereignistyp": np.random.choice(
        ["Ansicht", "Klick", "Favorit", "Zum Warenkorb hinzufügen", "Bestellung", "Kommentar"],
        n_events,
        p=[0.4, 0.25, 0.1, 0.1, 0.1, 0.05]
    ),
    "Ereigniszeit": pd.date_range("2024-01-15", periods=n_events, freq="10min")
})

# Daten zusammenführen
events = events.merge(users[["User ID", "Channel", "Device"]], on="User ID")

print("Benutzerdaten:")
print(users.head())
print(f"\nAnzahl der Benutzer: {len(users)}")
print("\n"Ereignisdaten:")
print(events.head())
print(f"\nAnzahl der Ereignisse: {len(events)}")

Benutzeraktivitätsanalyse

Verteilung der Ereignistypen

Beispiel

# Statistik der Ereignistypen
event_dist = events["Event Type"].value_counts()
event_pct = events["Event Type"].value_counts(normalize=True) * 100

print("=== Verteilung der Ereignistypen ==="\n")
event_analysis = pd.DataFrame({
    "Anzahl": event_dist,
    "Prozentsatz": event_pct.round(2)
})
print(event_analysis)
print()

# Anzahl der Benutzer nach Ereignistyp
event_users = events.groupby("Event Type")["User ID"].nunique()
print("Anzahl der Benutzer, die an jedem Ereignistyp teilnehmen:")
print(event_users)

Benutzerengagement

Beispiel

# Nutzerereignisstatistiken
user_events = events.groupby("User ID").agg({
    "Event ID": "count",
    "Event Type": lambda x: x.nunique()
}).rename(columns={
    "Event ID": "Total Events",
    "Event Type": "Number of Event Types"
})

print("=== Nutzerengagement ==="\n")
print(f"Durchschnittliche Ereignisse pro Nutzer: {user_events['Total Events'].mean():.1f}")
print(f"Median: {user_events['Total Events'].median():.0f}")
print(f"Max: {user_events['Total Events'].max()}")
print()

# Nutzersegmentierung
user_events["Activity Level"] = pd.cut(
    user_events["Ereignisse gesamt"],
    bins=[0, 3, 10, 20, float("inf")],
    labels=["Geringe Aktivität", "Normal", "Aktiv", "Hohe Aktivität"]
)

print("Verteilung der Benutzeraktivitätsstufen:")
print(user_events["Aktivitätsstufe"].value_counts())

Conversion-Funnel-Analyse

Conversion-Pfad

Beispiel

# Benutzer nach Ereignistyp zählen
funnel = events.groupby("Ereignistyp")["Benutzer-ID"].nunique()
funnel = funnel.reindex(["Ansicht", "Klick", "Favorit", "In den Warenkorb", "Bestellung", "Kommentar"])

# Conversion-Raten berechnen
funnel_df = pd.DataFrame({
    "Users": funnel,
    "Absolute Conversion Rate": (funnel / funnel["View"] * 100).round(2),
    "Step Conversion Rate": (funnel / funnel.shift(1) * 100).round(2)
}).fillna(100)

print("=== Conversion-Funnel ==="\n")
print(funnel_df)
print()

# Funnel-Daten visualisieren
print("Funnel-Daten:")
for step, row in funnel_df.iterrows():
    print(f"{step}: {row['Users']} Benutzer ({row['Absolute Conversion Rate']:.1f}%)")

Kanalanalyse

Leistung nach Kanal

Beispiel

# Kanalnutzeranalyse
channel_analysis = events.groupby("Channel").agg({
    "User ID": "nunique",
    "Event ID": "count"
}).rename(columns={
    "User ID": "Users",
    "Event ID": "Events"
})

channel_analysis["Events per User"] = (
    channel_analysis["Events"] / channel_analysis["Users"]
).round(2)

print("=== Kanalanalyse ==="\n")
print(channel_analysis)
print()

# Kanal-Konversionsvergleich
channel_funnel = events[events["Event Type"].isin(["View", "Order"])].groupby(
    ["Channel", "Event Type"]
)["User ID"].nunique().unstack()

channel_funnel["Conversion Rate"] = (
    channel_funnel["Order"] / channel_funnel["View"] * 100
).round(2)

print("Konversionsrate nach Kanal:")
print(channel_funnel)

Geräteanalyse

Beispiel

# Geräteanalyse
device_analysis = events.groupby("Device").agg({
    "User ID": "nunique",
    "Event ID": "count"
}).rename(columns={
    "User ID": "Users",
    "Event ID": "Events"
})

device_analysis["Events per User"] = (
    device_analysis["Events"] / device_analysis["Users"]
).round(2)

print("=== Geräteverteilung ==="\n")
print(device_analysis)
print()

# Gerätekonversionsrate
device_funnel = events[events["Event Type"].isin(["View", "Order"])].groupby(
    ["Device", "Event Type"]
)["User ID"].nunique().unstack()

device_funnel["Conversion Rate"] = (
    device_funnel["Order"] / device_funnel["View"] * 100
).round(2)

print("Konversionsrate nach Gerät:")
print(device_funnel)

Retention-Analyse

Beispiel

# Vereinfachte Retention-Analyse
# Es wird angenommen, dass eine Aktivität innerhalb von 7 Tagen nach der Registrierung als Retention gilt
users_with_events = events.groupby("User ID")["Event Time"].agg(["min", "max"])
users_with_events.columns = ["First Active", "Last Active"]

# Registrierungsinformationen zusammenführen
users_analysis = users.merge(users_with_events, left_on="User ID", right_index=True, how="left")

# Aktive Tage berechnen
users_analysis["Active Days"] = (
    users_analysis["Last Active"] - users_analysis["First Active"]
).dt.days + 1

print("=== Benutzerbindungsanalyse ==="\n")
print(f"Benutzer mit Verhalten: {len(users_with_events)}")
print(f"Durchschnittliche aktive Tage: {users_analysis['Active Days'].mean():.1f} Tage")
print()

# Retention am nächsten Tag (vereinfacht)
retention_1d = len(users_analysis[users_analysis["Active Days"] >= 2]) / len(users_analysis) * 100
retention_3d = len(users_analysis[users_analysis["Active Days"] >= 3]) / len(users_analysis) * 100

print(f"Retention-Rate am nächsten Tag: {retention_1d:.1f}%")
print(f"3-Tage-Retention-Rate: {retention_3d:.1f}%")

Analysezusammenfassung

Beispiel

print("""
=== Zusammenfassung der Nutzerverhaltensanalyse ===

1. Nutzerengagement
- Ereignistypen werden von Aufrufen dominiert, gefolgt von Klicks
- Die durchschnittliche Anzahl von Ereignissen pro Nutzer ist niedrig; die Nutzerbindung muss verbessert werden

2. Conversion-Funnel
- Es gibt einen signifikanten Abbruch; die Nutzererfahrung muss optimiert werden
- Die Konversionsrate von der Ansicht zur Bestellung ist relativ niedrig

3. Kanaleffektivität
- Es wird empfohlen, sich auf die Optimierung des Conversion-Pfads von Kanälen mit hohem Traffic zu konzentrieren
- Die Performance variiert je nach Kanal; es sind fein abgestimmte Maßnahmen erforderlich

4. Geräteleistung
- Mobile ist das primäre Gerät; das mobile Erlebnis muss optimiert werden

5. Optimierungsvorschläge
- 1) Produktdarstellung optimieren, um die Ansicht-zu-Klick-Konversion zu verbessern
- 2) Den Kaufprozess vereinfachen, um Bestellabbrüche zu reduzieren
- 3) Die Seitenladegeschwindigkeit für Mobilgeräte optimieren
- 4) Ein abgestuftes System für die Nutzerbetreuung einführen
"""
)
Weitere Erweiterungen