Data-Set
Vertieftes Wissen  |
Vertieftes Wissen
Lesedauer: 9 Min

Netflix Abonnenten Prognose – Ein Data Analyst Case

André Wehr
Mithilfe von Techniken wie der Zeitreihenprognose kann Netflix die erwartete Anzahl neuer Abonnenten in einem bestimmten Zeitraum schätzen und das Wachstumspotenzial seines Unternehmens besser verstehen.

Im Folgenden beschreibe ich hier Schritt für Schritt ein einfaches Verfahren zur Prognostizierung zukünftiger Netflix Abonnenten Zahlen. Dabei verfahre ich nach folgenden Vorgehen:

  • Sammeln historischer Netflix-Abonnementwachstumsdaten
  • Vorverarbeitung und Bereinigung der Daten
  • Untersuchen und Analysieren von Zeitreihenmustern
  • Auswahl eines Zeitreihenprognosemodells (z. B. ARIMA, LSTM)
  • Trainieren des Modells anhand der Trainingsdaten
  • Vorhersage der zukünftigen Anzahl von Netflix-Abonnements

Der Prozess zur Vorhersage von Netflix-Abonnements beginnt also mit der Sammlung eines Datensatzes, der auf dem historischen Wachstum der Netflix-Abonnenten basiert.

Ich habe einen idealen Datensatz für diese Aufgabe gefunden. Du kannst einen bereinigten und vorbereiteten Datensatz hier herunterladen.

Im folgenden Abschnitt führe ich dich durch die Aufgabe der Vorhersage von Netflix-Abonnements mithilfe von Time Series Forecasting und der Programmiersprache Python.
Hinweis: Du bist eher in R unterwegs? Dann heißen deine Libraries unterschiedlich, aber du kannst ebenso diese Prognose-Tätigkeit durchführen.

 

Prognose von Netflix-Abonnements mit Python

Beginnen wir mit dieser Aufgabe, indem wir die notwendigen Python-Bibliotheken und das Dataset importieren.

Hinweis: Die Vorbereitungs-Tätigkeiten (Setup Python, Bibliotheken etc.) beschreibe ich nicht gesondert in diesem Artikel. Der einfachste und schnellste Weg für den Start damit kann über die Plattform Kaggle sein. Du eröffnest dir dort ein neues Notebook, fügst das Netflix-Dataset hinzu und ab dann funktioniert die Beschreibung aus diesem Artikel. Du möchtest das Ganze lokal bei dir auf dem Mac/PC durchführen? Dann führe ein Basic Python Setup bei dir durch, z.B. mit Jupyter Notebook, PyCharm oder auch Visual Studio. 

				
					# Importing Necessary Python libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objs as go
import plotly.express as px
import plotly.io as pio
pio.templates.default = "plotly_white"
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# reading the data
data = pd.read_csv('/DEIN-DATEIPFAD/Netflix-Subscriptions-2011-2023.csv')
print(data.head())
				
			

Der Datensatz enthält die Anzahl der Abonnements von Netflix zu Beginn eines jeden Quartals von Q3/2011 bis Q4/2023. Bevor wir fortfahren, konvertieren wir den Datentyp der Spalte „Time Period“ in ein Datumsformat:

				
					# transform the Time Period into proper date format
data['Time Period'] = pd.to_datetime(data['Time Period'], 
                                     format='%d/%m/%Y')
print(data.head())
				
			

Werfen wir nun einen Blick auf das quartärliche Abonnentenwachstum von Netflix:

				
					# print a visual time series representation
fig = go.Figure()
fig.add_trace(go.Scatter(x=data['Time Period'],
                         y=data['Subscribers'],
                         mode='lines', name='Subscribers'))
fig.update_layout(title='Netflix Quartärliches Abonnenten Wachstum',
                  xaxis_title='Zeitreihe',
                  yaxis_title='Netflix Abonnenten')
fig.show()
				
			

Aus dem obigen Diagramm, im Endeffekt die erste durchgeführte Datenanalyse, geht hervor, dass das Wachstum der Netflix-Abonnenten nicht saisonal ist. Daher können wir später für diesen Datensatz eine Prognosetechnik wie ARIMA verwenden.

Werfen wir nun einen Blick auf die vierteljährliche Wachstumsrate der Abonnenten von Netflix:

				
					# calculate the quarterly growth rate
data['Quarterly Growth Rate'] = data['Subscribers'].pct_change() * 100

# Create a new column for bar color (green for positive growth, pink for negative growth)
data['Bar Color'] = data['Quarterly Growth Rate'].apply(lambda x: '#CCFF66' if x > 0 else '#FFD1FF')

# Plot the quarterly growth rate using bar graphs
fig = go.Figure()
fig.add_trace(go.Bar(
    x=data['Time Period'],
    y=data['Quarterly Growth Rate'],
    marker_color=data['Bar Color'],
    name='Quarterly Growth Rate'
))
fig.update_layout(title='Netflix quartärliche Abonnenten Wachstumsrate',
                  xaxis_title='Quartal/Jahr',
                  yaxis_title='Quartärliche Wachstumsrate (%)')
fig.show()
				
			

Diese Repräsentation gibt uns einige Insights, z.B. zum durchgängig schwächsten Quartal (Q2) in nahezu allen Jahren sowie zu den Quartalen mit Abonnenten-Rückgang (Q1 + Q2 2022)

Werfen wir nun einen Blick auf die jährliche Wachstumsrate:

				
					# Create a new column for the year
data['Year'] = data['Time Period'].dt.year

# Plot the quarterly growth rate for each year as stacked columns
fig = go.Figure()

quarters = ['Q1', 'Q2', 'Q3', 'Q4']
for quarter in quarters:
    data[quarter] = data['Quarterly Growth Rate'].where(data['Time Period'].dt.quarter == int(quarter[1]), 0)
    fig.add_trace(go.Bar(
        x=data['Year'],
        y=data[quarter],
        name=quarter
    ))

fig.update_layout(title='Netflix jährliche Abonnenten Wachstumsrate, gestapelt nach Quartalen',
                  xaxis_title='Jahr',
                  yaxis_title='Wachstumsrate (%)',
                  barmode='stack')
fig.show()
				
			

Verwendung von ARIMA zur Voraussage der quartärlichen Netflix-Abonnements 

Beginnen wir nun mit der Zeitreihenprognose unter Verwendung von ARIMA, um die Nutzerzahlen von Netflix mit Python zu prognostizieren. Ich beginne mit der Konvertierung der Daten in ein Zeitreihenformat:

				
					time_series = data.set_index('Time Period')['Subscribers']
				
			

Hier konvertieren wir den ursprünglichen DataFrame in ein Zeitreihenformat, wobei die Spalte „Zeitraum“ zum Index und die Spalte „Abonnenten“ zu den Daten wird.

Wir ermitteln nun den Wert von p und q, indem wir die ACF und PACF der differenzierten Zeitreihen grafisch darstellen:

				
					differenced_series = time_series.diff().dropna()

# Plot ACF and PACF of differenced time series
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
plot_acf(differenced_series, ax=axes[0])
plot_pacf(differenced_series, ax=axes[1])
plt.show()
				
			

Wir haben nun zunächst die differenzierte Zeitreihe aus der ursprünglichen Zeitreihe berechnet, alle aus der Differenzierung resultierenden NaN-Werte entfernt und dann die ACF und PACF aufgetragen, um einen Einblick in die mögliche Reihenfolge der AR- und MA-Komponenten in der Zeitreihe zu erhalten. Diese Diagramme sind nützlich für die Bestimmung der geeigneten Parameter bei der Verwendung des ARIMA-Modells für die Zeitreihenprognose.

Aus den Diagrammen geht hervor, dass p=1 und q=1 ist. Die ACF-Darstellung schneidet bei Lag 1 ab, was auf q=1 hinweist, und die PACF-Darstellung schneidet ebenfalls bei Lag 1 ab, was auf p=1 hinweist. Da es einen linearen Trend in der Wachstumsrate des Abonnements gibt, können wir den Wert von d auf 1 setzen, um den linearen Trend zu entfernen und die Zeitreihe stationär zu machen.

Hier ist nun die Anwendung des ARIMA-Modells auf unsere Daten:

				
					p, d, q = 1, 1, 1
model = ARIMA(time_series, order=(p, d, q))
results = model.fit()
print(results.summary())
				
			

Anzeige

tractionwise Logo

Progno… WAS? In deiner Company fehlt bisher der Daten-Durchblick?

Mit Hilfe des trainierten Modells können Sie nun die Anzahl der Abonnenten für die nächsten fünf Quartale vorhersagen:

				
					future_steps = 5
predictions = results.predict(len(time_series), len(time_series) + future_steps - 1)
predictions = predictions.astype(int)
print(predictions)
				
			

Lass uns nun die Ergebnisse der Netflix-Abonnementprognose für die nächsten fünf Quartale visualisieren:

				
					# Create a DataFrame with the original data and the predictions
forecast = pd.DataFrame({'Original': time_series, 'Predictions': predictions})

# Plot the original data and predictions
fig = go.Figure()

# Original data in blue with continuous line
fig.add_trace(go.Scatter(x=forecast.index, y=forecast['Original'],
                         mode='lines', name='Originale Abonnenten-Daten',
                         line=dict(color='blue')))

# Predictions in black with dashed line
fig.add_trace(go.Scatter(x=forecast.index, y=forecast['Predictions'],
                         mode='lines', name='Prognose',
                         line=dict(color='black', dash='dash')))

fig.update_layout(title='Netflix Quarterly Subscription Predictions',
                  xaxis_title='Zeitreihe',
                  yaxis_title='Abonnenten',
                  legend=dict(x=0.1, y=0.9),
                  showlegend=True)

fig.show()
				
			

So kannst du also mit Hilfe von Zeitreihenprognosen und Python die Anzahl der Abonnements für einen bestimmten Zeitraum vorhersagen.

Zusammenfassung

Mithilfe von Techniken wie der Zeitreihenprognose kann Netflix die erwartete Anzahl neuer Abonnenten in einem bestimmten Zeitraum schätzen und das Wachstumspotenzial seines Geschäftsmodells besser verstehen. Dies verbessert die betriebliche Effizienz, die Finanzplanung und die Content-Strategie und trägt letztlich zum Erfolg und Wachstum des Unternehmens in der hart umkämpften Streaming-Branche bei. Ich hoffe, dass dir dieser Artikel über Netflix-Abonnementprognosen mit Python gefallen hat.

Quellen

Inspiration zu diesem Artikel fand ich bei bei Aman Kharwal, den Kaggle Competitions sowie bei BusinessofApps.

Der Datensatz basiert auf Netflix Unternehmensdaten, die öffentlich im Internet einsehbar sind.

André Wehr
André Wehr

MD tractionwise | Strategy, Data & Conversion