Dieses Projekt zielt darauf ab, Kaufabsichten im E-Commerce vorherzusagen. Mithilfe historischer und Echtzeitdaten sollen Nutzer mit hoher Konvertierungswahrscheinlichkeit identifiziert werden. Ziel ist es, Marketingmaßnahmen zu optimieren, Abwanderung zu reduzieren und Konversionsraten zu steigern. https://archive.ics.uci.edu/dataset/468/online+shoppers+purchasing+intention+dataset
To upload files, please first save the app
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
import plotly.express as px
import plotly.graph_objects as go
# Page config
st.set_page_config(page_title="E-Commerce Kaufabsicht Vorhersage", layout="wide")
# Titel und Einführung
st.title("🛍️ E-Commerce Kaufabsicht Vorhersage")
st.markdown("""
Diese App analysiert das Verhalten von Online-Shop-Besuchern und sagt vorher,
ob sie wahrscheinlich einen Kauf tätigen werden. Die Vorhersagen basieren auf
verschiedenen Merkmalen wie Besuchszeit, Seitenaufrufe und bisherigem Kaufverhalten.
""")
# Daten laden
@st.cache_data
def load_data():
# NOTE: Using corsproxy.io because we're in a WASM environment
url = "https://corsproxy.io/?https://archive.ics.uci.edu/ml/machine-learning-databases/00468/online_shoppers_intention.csv"
df = pd.read_csv(url)
return df
def prepare_data(df):
# Kategorische Variablen kodieren
df = pd.get_dummies(df, columns=['Month', 'VisitorType', 'Weekend'])
return df
# Daten laden und vorbereiten
try:
df = load_data()
df_prepared = prepare_data(df)
# Dashboard in Tabs organisieren
tab1, tab2, tab3 = st.tabs(["📊 Datenübersicht", "🔮 Vorhersage", "📈 Visualisierungen"])
with tab1:
st.header("Datenübersicht")
st.write("Anzahl der Datensätze:", len(df))
st.write("Konversionsrate:", f"{(df['Revenue'].mean()*100):.2f}%")
col1, col2 = st.columns(2)
with col1:
st.subheader("Beispieldaten")
st.dataframe(df.head())
with col2:
st.subheader("Statistiken")
st.dataframe(df.describe())
with tab2:
st.header("Kaufabsicht Vorhersage")
# Model Training
@st.cache_resource
def train_model(df_prepared):
X = df_prepared.drop('Revenue', axis=1)
y = df_prepared['Revenue']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_scaled, y_train)
return model, scaler
model, scaler = train_model(df_prepared)
# Eingabefelder für Vorhersage
st.subheader("Geben Sie die Besucherdaten ein:")
col1, col2, col3 = st.columns(3)
with col1:
administrative = st.number_input("Administrative Seiten", min_value=0, value=0)
informational = st.number_input("Informative Seiten", min_value=0, value=0)
product_related = st.number_input("Produktbezogene Seiten", min_value=0, value=0)
with col2:
bounce_rate = st.slider("Bounce Rate", 0.0, 1.0, 0.2)
exit_rate = st.slider("Exit Rate", 0.0, 1.0, 0.2)
page_value = st.slider("Page Value", 0.0, 100.0, 10.0)
with col3:
special_day = st.slider("Special Day", 0.0, 1.0, 0.0)
month = st.selectbox("Monat", ['May', 'Nov', 'Mar', 'Dec', 'Oct', 'Sep', 'Aug', 'Jul', 'June', 'Feb'])
weekend = st.checkbox("Wochenende")
if st.button("Vorhersage berechnen"):
# Beispiel-Input erstellen
input_data = pd.DataFrame({
'Administrative': [administrative],
'Informational': [informational],
'ProductRelated': [product_related],
'BounceRates': [bounce_rate],
'ExitRates': [exit_rate],
'PageValues': [page_value],
'SpecialDay': [special_day],
})
# Dummy-Variablen hinzufügen
for m in df_prepared.columns:
if m.startswith('Month_'):
input_data[m] = 1 if m == f'Month_{month}' else 0
input_data['Weekend_True'] = 1 if weekend else 0
input_data['Weekend_False'] = 0 if weekend else 1
# Fehlende Spalten mit 0 auffüllen
for col in df_prepared.columns:
if col not in input_data.columns and col != 'Revenue':
input_data[col] = 0
# Vorhersage
input_scaled = scaler.transform(input_data)
prediction = model.predict_proba(input_scaled)[0]
# Ergebnis anzeigen
st.subheader("Vorhersageergebnis")
fig = go.Figure(go.Indicator(
mode = "gauge+number",
value = prediction[1] * 100,
title = {'text': "Kaufwahrscheinlichkeit"},
gauge = {
'axis': {'range': [0, 100]},
'bar': {'color': "darkblue"},
'steps': [
{'range': [0, 30], 'color': "lightgray"},
{'range': [30, 70], 'color': "gray"},
{'range': [70, 100], 'color': "darkgray"}
]
}
))
st.plotly_chart(fig)
if prediction[1] > 0.5:
st.success(f"Dieser Besucher wird mit {prediction[1]:.1%} Wahrscheinlichkeit einen Kauf tätigen!")
else:
st.warning(f"Dieser Besucher wird wahrscheinlich keinen Kauf tätigen (Wahrscheinlichkeit: {prediction[1]:.1%})")
with tab3:
st.header("Datenvisualisierungen")
# Visualisierung 1: Conversion Rate nach Monat
monthly_conversion = df.groupby('Month')['Revenue'].mean().reset_index()
fig1 = px.bar(monthly_conversion, x='Month', y='Revenue',
title='Konversionsrate nach Monat',
labels={'Revenue': 'Konversionsrate', 'Month': 'Monat'})
st.plotly_chart(fig1)
# Visualisierung 2: Seitenaufrufe vs. Conversion
fig2 = px.scatter(df, x='ProductRelated', y='PageValues', color='Revenue',
title='Produktbezogene Seitenaufrufe vs. Page Values',
labels={'ProductRelated': 'Produktbezogene Seitenaufrufe',
'PageValues': 'Page Values',
'Revenue': 'Kauf getätigt'})
st.plotly_chart(fig2)
# Visualisierung 3: Bounce Rate Distribution
fig3 = px.histogram(df, x='BounceRates', color='Revenue',
title='Verteilung der Bounce Rates',
labels={'BounceRates': 'Bounce Rate',
'Revenue': 'Kauf getätigt'})
st.plotly_chart(fig3)
except Exception as e:
st.error(f"Fehler beim Laden der Daten: {str(e)}")
st.info("Bitte stellen Sie sicher, dass Sie eine Internetverbindung haben und der Datensatz verfügbar ist.")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?