Hausarbeit 1

Programmierung für Data Science

Aufgabe: Break-even & Preisgestaltung (10 Punkte)

Ziel

Sie entwickeln ein kleines R-Toolkit zur Beantwortung grundlegender betriebswirtschaftlicher Fragen: Wie hoch ist der Deckungsbeitrag, ab welcher Menge erreichen wir den Break-even, wie verändert sich der Gewinn unter einfachen Szenarien?

Teil 1 (vorgegeben): Generator

Verwenden Sie ausschließlich die folgende Funktion make_scenarios(seed), um die Eingabedaten zu erzeugen (nicht verändern):

Listing 1: Funktion zur Erzeugung der Eingabedaten zufälliger Szenarien für die Aufgabenstellung zur Break-even Analyse
make_scenarios <- function(seed) {
  set.seed(seed)
  n <- 8L  # Anzahl Szenarien (fix)

  # Zufallswerte (Basis-R), alles bewusst einfach gehalten:
  price      <- round(runif(n, min = 8,  max = 20), 2)
  var_cost   <- round(runif(n, min = 3,  max = 12), 2)
  fix_cost   <- round(runif(n, min = 5000, max = 20000), 0)
  qty        <- round(runif(n, min = 0,  max = 5000), 0)

  df <- data.frame(
    scenario_id = 1:n,
    price       = price,
    var_cost    = var_cost,
    fix_cost    = fix_cost,
    qty         = qty,
    stringsAsFactors = FALSE
  )
  return(df)
}

Ihre Aufgabe beginnt ab Teil 2.

Teil 2: Kernfunktionen

Schreiben Sie ohne externe Pakete folgende Funktionen (mit sprechenden Parametern, Kommentaren und Fehlerbehandlung):

  1. contribution(price, var_cost)
    • Rückgabe: Deckungsbeitrag je Einheit (numeric).
    • Plausibilitätsprüfungen (z. B. numerisch, nicht negativ etc.).
  2. break_even_qty(price, var_cost, fix_cost)
    • Rückgabe: notwendige Stückzahl für Break-even (auf ganze Einheiten aufrunden).
    • Falls price <= var_cost: sinnvoll begründete Rückgabe (z. B. Inf).
  3. profit(price, var_cost, fix_cost, qty)
    • Rückgabe: Gewinn als numeric.
    • Plausibilitätsprüfungen der Eingaben.
  4. scenario_check(price, var_cost, fix_cost, qty)
    • Rückgabe: Liste mit mindestens
      • is_valid (TRUE/FALSE) und
      • reason (Character, kurze Begründung im Fehlerfall).
    • Beispielregeln: price > 0, var_cost >= 0, fix_cost >= 0, qty >= 0, price > var_cost.

Teil 3: Auswertung über alle Szenarien

Implementieren Sie evaluate(df), die für jede Zeile von df (aus make_scenarios, vgl. Listing 1) berechnet:

  • Deckungsbeitrag, Break-even-Menge, Gewinn, Status:
    • "invalid" (wenn scenario_check FALSE),
    • "ok" (wenn qty >= break_even_qty),
    • "below_be" (sonst).
  • Rückgabe: Liste mit
    • results_df (Originalspalten + berechnete Spalten),
    • table_status (Anzahl je Status),
    • best_scenario (Index der Zeile mit höchstem Gewinn unter status != "invalid"; bei Ties: kleinste scenario_id).
Hinweis

Verwenden Sie Basis-R (z. B. Schleifen oder apply-Varianten). Kein Tidyverse.

Zusätzliche Funktionalität (optional): Einfache Preisvorschlagsfunktion

price_suggestion(var_cost, fix_cost, target_margin, start_qty)

  • Zweck: Mindestpreis vorschlagen, damit bei Zielmarge (z. B. 20 %) und Startmenge (z. B. 1000) ein Break-even plausibel erscheint.
  • Sie dürfen eine einfach gehaltene Vorgehensweise nutzen (z. B. schrittweise Anhebung des Preises per Schleife).

Teil 4: Dokumentierter Ablauf

Schreiben Sie run_be(seed), die

  1. df <- make_scenarios(seed) erzeugt,
  2. res <- evaluate(df) ausführt,
  3. und dann ausgibt: res$table_status, den Index res$best_scenario sowie die wichtigsten Kennzahlen dieser Zeile.

Abgabe

Abgabe folgender Resultate über Teams bis zum 26.10.2025, 23:59 Uhr:

  • R-Skript: be_toolkit.R (alle Funktionen aus Teil 2–4; gut kommentiert).
  • Kurz-Screencast (≤ 5 Min): Link zum Video mit Kurzerklärung der Funktionen aus Teil 2-4 und Live-Aufruf run_be(seed=<Ihre_Matrikelnummer>) + 1–2 Sätze, warum das best_scenario sinnvoll ist.1

Verwendung von KI-Tools (für diese Aufgabe)

  • Grundsätzlich erlaubt, aber unterstützend und reflektiert.
  • Zuerst selbst versuchen, dann ggf. KI als Hilfestellung.
  • Übernommener Code muss vollständig verstanden und im Video erklärt werden.
  • Transparenz: Größere KI-Nutzung offen kennzeichnen (1–2 Sätze).

Bewertungskriterien

Tabelle 1: Bewertungskriterien zur Hausarbeit 1
Kriterium Gewicht ausgezeichnet (4) gut (3) akzeptabel (2) verbesserungswürdig (1) inakzeptabel (0)
Korrektheit & Funktionalität (contribution, break_even_qty, profit, evaluate) 30% Alle Kernfunktionen korrekt (inkl. Randfälle); evaluate liefert korrekte Statuslogik (invalid/ok/below_be) und bestimmt best_scenario korrekt. Weitgehend korrekt; kleine Ungenauigkeiten/Randfälle; best_scenario und Status meist korrekt. Grundfunktionalität vorhanden, aber mehrere Fehler (z. B. falsche Status in Randfällen) oder Teile unvollständig. Läuft nur teilweise; falsche Kennzahlen/Status; wesentliche Randfälle ignoriert. Nicht funktionsfähig oder fehlt.
Schnittstellen, Kommentare & Kontrollstrukturen 20% Sprechende Parameter & klare Rückgaben; saubere if/else- und Schleifen-Struktur; sehr gut kommentiert; konsistenter, lesbarer Stil. Korrekte Struktur und Kommentare mit kleineren Redundanzen/Uneinheitlichkeiten. Nachvollziehbar, aber uneinheitliche Schnittstellen/Benennungen oder knappe Kommentare. Unstrukturierter Code, wenig/keine Kommentare; schwer lesbar. Logik nicht nachvollziehbar; Struktur fehlt.
Validierungen & Fehlerbehandlung (scenario_check) 20% Umfassende Plausibilitätsprüfungen (Typen, Wertebereiche, Relationen) mit klaren Fehlermeldungen/Begründungen; keine stillen Fehler. Die meisten relevanten Prüfungen vorhanden; einzelne Lücken oder wenig präzise Meldungen. Basale Prüfungen (z. B. Nichtnegativität) vorhanden, aber wichtige Checks fehlen. Fehlerbehandlung nur ansatzweise; unklare/fehlende Meldungen. Keine Validierungen; Funktion bricht bei Fehlern ab.
Auswertung & Ergebnisdarstellung (evaluate) 20% Vollständige, klare Ergebnisstruktur (results_df, table_status, best_scenario) und kurze, nachvollziehbare Interpretation/Begründung der Entscheidung. Ergebnisse überwiegend korrekt; kleine Unschärfen in Struktur oder Begründung. Ergebnisse prinzipiell vorhanden, aber unvollständig/teils unklar (z. B. fehlende Tabelle oder unpräzise Interpretation). Ausgabe unsystematisch; zentrale Elemente fehlen; Interpretation nicht nachvollziehbar. Keine verwertbare Auswertung.
Reproduzierbarkeit (set.seed, sessionInfo) 10% Seed gesetzt, sessionInfo im Report; Ausführung reproduzierbar (keine absoluten, personenabhängigen Pfade). Seed oder sessionInfo vorhanden; geringe Reibungen (z. B. Pfad-Hinweis). Seed/Sessioninfo teils unklar oder nicht konsequent; Ergebnis ist mit Aufwand reproduzierbar. Keine klare Reproduzierbarkeit; Seed/Sessioninfo fehlen. Nicht reproduzierbar.
BONUS: price_suggestion (optional) 0% (+1 Punkt) Funktion vorhanden, läuft korrekt und nachvollziehbar; einfache, begründete Logik (z. B. schrittweise Suche); Grenzen/Annahmen benannt. Funktion vorhanden und funktionsfähig; Logik im Wesentlichen plausibel, kleinere Schwächen. Ansatz vorhanden, aber nur teilweise funktionsfähig oder ohne Begründung. Rudimentärer, nicht belastbarer Ansatz; kaum nachvollziehbar. Nicht vorhanden.

Zurück nach oben

Fußnoten

  1. Für die Aufzeichnung des Videos (Ihr Bildschirm und Ton für die Erläuterungen) können sie z.B. die kostenlose Version von Loom verwenden.↩︎