Technische Artikel

Einführung der Lean-Startup-Methode mit MATLAB zur Entwicklung von Algorithmen für Big-Data-Analysen

Von Chetan Jadhav, New York Life Investment Management


Die Lean-Startup-Methode wurde ursprünglich entwickelt, damit High-Tech-Startups ihr Risiko im Falle eines Fehlschlags minimieren können, indem sie von kürzeren Entwicklungszyklen und niedrigeren Investitionsausgaben profitieren. Das Ziel ist die schnelle Erstellung eines Prototyps oder eines Minimal Viable Product (MVP) unter Einsatz möglichst weniger Ressourcen. Wenn das MVP vielversprechend ist, kann es in ein vermarktungsfähiges Produkt umgewandelt werden. Wenn nicht, kann das Unternehmen eine andere Idee ausprobieren, ohne Zeit oder Budget verschwendet zu haben.

Die gleichen Vorteile, die Lean Startup zu einem idealen Ansatz für kleine, junge Unternehmen machen, machen es auch für Geschäftsbereiche in großen etablierten Unternehmen attraktiv. Diese Geschäftsbereiche haben häufig ebenfalls beschränkte Ressourcen; die wenigsten können sich sechs Monate Entwicklungsarbeit leisten, nur um eine neue Idee auszuprobieren. Wenn eine Idee hingegen innerhalb weniger Wochen von einem einzigen Entwickler überprüft werden kann, ist das Kosten-Nutzen-Verhältnis ein ganz anderes, und viel mehr potenziell aussichtsreiche Projekte können evaluiert werden.

Vor Kurzem haben meine Kollegen und ich bei der Credit Suisse den Lean-Startup-Ansatz mit MATLAB® verwendet, um eine Big-Data-Anwendung zur Identifizierung potenzieller Kunden zu entwickeln. Damit haben wir 300.000 USD an Softwarekosten eingespart. MATLAB ist für die Umsetzung der Lean-Startup-Methode gut geeignet. Mit MATLAB konnten wir viel schneller Softwareprototypen entwickeln und neue Ideen iterativ untersuchen, als dies mit Java®, C oder einer anderen maschinennahen Sprache möglich gewesen wäre.

Vom Wasserfallmodell zu Lean Startup

Viele Unternehmen verwenden heute noch das herkömmliche Wasserfallmodell für die Softwareentwicklung. Nach dem Wasserfallmodell werden die Anforderungen umfassend definiert und dann werden nacheinander systematisch die langen Phasen Entwurf, Implementierung und Verifikation durchgeführt. Dieser Prozess kann Monate oder sogar Jahre dauern, und wenn das resultierende Produkt den Erwartungen der Kunden nicht entspricht, ist ein Großteil dieser Arbeit verschwendet.

In vielerlei Hinsicht ist Lean Startup die gegenteilige Philosophie zum Wasserfallmodell. Unternehmen, die einen Lean-Startup-Ansatz verwenden, iterieren drei kurze Phasen schnell immer wieder: Erstellen, Messen und Lernen (Abbildung 1). Diese Phasen bieten viele Gelegenheiten, den Kurs zu korrigieren und das Fehlschlagrisiko zu reduzieren.

Abbildung 1: Die drei Phasen der Lean-Startup-Methode.

Abbildung 1: Die drei Phasen der Lean-Startup-Methode.

In der Erstellungsphase wird eine Idee für einen neuen Unternehmensprozess oder ein neues Produkt zu einer messbaren Hypothese verfeinert, beispielsweise: „Es ist möglich, potenzielle neue Kunden aus den persönlichen und beruflichen Netzwerken vorhandener Kunden zu identifizieren.“ Das Team erstellt dann ein MVP, das ausschließlich die grundlegende Funktionalität umfasst, die zum Testen der Hypothese notwendig ist.

In der Messungsphase wird die Hypothese anhand der Ergebnisse überprüft, die das MVP erbringt. In der Lernphase trifft das Team die Grundsatzentscheidung, ob es die Richtung verändern, in dieselbe Richtung weiterarbeiten oder das Projekt aufgeben will: Wenn die Hypothese sich nicht als wahr erwiesen hat und das Team keine sinnvolle Perspektive für das MVP sieht, wird das Projekt aufgegeben. Wenn die Hypothese sich teilweise als wahr erwiesen hat, kann das Team entscheiden, die Richtung zu verändern, d. h. notwendige Änderungen am MVP vorzunehmen und damit in die nächste Iteration zu gehen. Wenn die Hypothese sich als vollständig wahr erwiesen hat, kann das Team mit dem weiterarbeiten, was es schon hat – indem es beispielsweise eine skalierbare Produktionsversion des MVP erstellt.

Lean Startup mit MATLAB: Identifizierung potenzieller Kunden aus Big Data-Datensätzen

Dieses Projekt basierte auf der Hypothese, dass es leichter ist, neue Kunden aus einem Pool von Personen zu akquirieren, die über persönliche und berufliche Beziehungen zu den vorhandenen Kunden eines Unternehmens verfügen, als aus einem Pool von Personen ohne solche Beziehungen.

Um diese Hypothese zu testen, sollte unser MVP eine Softwarelösung sein, die Personen in internen Datenbanken von Kunden und Mitarbeitern mit Personen in externen Datenbanken aus einem früheren Projekt abgleichen konnte. Diese externen Datenbanken enthielten keine eindeutigen Identifikationsmerkmale, wie etwa Sozialversicherungsnummern, für die einzelnen Personen. Dies bedeutete, dass unsere erste Herausforderung darin bestand, Algorithmen zu entwickeln, die Datensätze in den internen Datenbanken mit denen in den externen Datenbanken abglichen, indem sie Namen und Adressen verglichen.

Ein einfacher String-Vergleich der Namen und Adressen war nicht aussichtsreich, da derartige Daten häufig Tippfehler, Abkürzungen und Kurznamen (wie „Will“ statt „William“) enthalten. Wir brauchten einen Fuzzy-Matching-Algorithmus. Wir fanden eine für diesen Zweck entwickelte Drittanbieterlösung, aber die Lizenz hätte 300.000 USD pro Halbjahr gekostet, und wir hatten keine Garantie, dass es funktionieren würde. Im Geiste von Lean Startup entschieden wir uns dafür, unseren eigenen Fuzzy-Matching-Algorithmus mit MATLAB zu erstellen.

Der String-Vergleich-Algorithmus basierte auf der Jaro-Winkler-Distanz, einer Metrik, die zum Teil von William E. Winkler in der US-Volkszählungsbehörde (Bureau of the Census) entwickelt wurde, um Einträge in Datenbanken miteinander zu verknüpfen. Auf der Website des Rochester Institute of Technology fand ich, die mit ungefähr 120 Zeilen C-Code implementiert war. Ich implementierte den Algorithmus in MATLAB neu und verwendete dabei weniger als 30 Zeilen Code:

function  jw = jarowinkler(s1,s2)
% jw = jarowinkler(s1,s2) calculates the Jaro Winker string distance between
% strings s1 and s2

s1 = lower(s1);
s2 = lower(s2);
s1l = length(s1);
s2l = length(s2);
s11 = repmat(s1,s2l,1);
s22 = repmat(s2',1,s1l);
% Calculate the matching distance
mtxwin = floor(max(length(s1),length(s2))/2)-1;
mtxmat = double(s11 == s22);
% Ignore the matched characters outside of matching distance
mtxmat = mtxmat - tril(mtxmat,-mtxwin-1) - triu(mtxmat,mtxwin+1);
% Ignore additional matches beyond first match
m = zeros(s2l,s1l);
for i=1:s1l
    if any(mtxmat(:,i))
        fmatid = find(~any(m,2) & mtxmat(:,i),1);
        m(fmatid,i) = mtxmat(fmatid,i);
    end
end
s1m = any(m);
s2m = any(m,2);
% Calculate the number of transpositions
t = sum(~mtxmat(sub2ind(size(m),find(s2m),find(s1m)')))/2;
% Calculate the number of matches
m = sum(s1m);
% Jaro distance
dj = (m/s1l + m/s2l + (m-t)/m)/3;
% Winkler modification
jw = dj + 0.1*(s1(1:3)==s2(1:3))*cumprod(s1(1:3)==s2(1:3))'*(1-dj);

Wir wendeten den String-Vergleich-Algorithmus auf Daten mit Namen und Adressen an, die in mehreren großen Datenbanken gespeichert waren. Die internen Datenbanken enthielten ca. 100.000 Einträge und die externen ca. 200.000. Um alle internen Datensätze mit allen externen abzugleichen, waren daher ca. 20 Milliarden Vergleiche erforderlich (100.000 x 200.000). Um die Datenbank-Zugriffszeiten zu minimieren und den Network Overhead bei Client-Server-Datenbanken zu vermeiden, richtete ich eine SQLite-Datenbank mit lokaler Datenspeicherung ein. Nachdem ich alle verfügbaren Daten in SQLite geladen hatte, griff ich von MATLAB aus mithilfe der Database Toolbox™ auf sie zu.

Verbessern des MVP mit Iterationen von Erstellen, Messen und Lernen

Ich erstellte die erste Version des MVP mit dem Jaro-Winkler-Algorithmus, den ich in MATLAB implementiert hatte. Der Algorithmus erzeugte korrekte Ergebnisse und führte effektiv eine JOIN-Operation für die internen und externen Datenbanken durch, aber er war langsam und brauchte über 16 Stunden, um die 20 Milliarden Abgleichsoperationen auf einem einzelnen Prozessorkern durchzuführen.

An diesem Punkt war unser MVP Erfolg versprechend, sodass wir uns dafür entschieden, die Richtung zu verändern und es zu verbessern. Um unser MVP zu optimieren, erstellte ich mit MATLAB eine MEX-Datei. Darin implementierte ich eine C-Komponente, die den rechenintensiven Teil der Jaro-Winkler-Berechnung durchführte.

Unser zweites MVP war zwar schneller als das erste, aber einen Nachteil hatte es dennoch: Es erforderte manuelle Schritte, um eine wichtige Schwellenwert-Einstellung zu ermitteln, die im Algorithmus verwendet wird. Jede Jaro-Winkler-Messung erzeugt ein Ergebnis zwischen 0 und 1. Dabei bedeutet 0, dass die Strings einander gar nicht ähnlich sind, und 1 bedeutet, dass sie identisch sind. In den ersten beiden Versionen des MVP mussten wir die Ergebnisse manuell untersuchen, um die beste Einstellung für diesen Schwellenwert zu ermitteln. Wenn der Schwellenwert zu hoch festgelegt war, fand das System nicht alle Übereinstimmungen, und wenn er zu niedrig war, setzte es Einträge miteinander in Beziehung, die nicht zusammengehörten.

Die manuelle Untersuchung kostete zu viel Zeit, um sie auf Datenbanken mit Hunderttausenden von Datensätzen anzuwenden. Um dieses Problem zu lösen, aktualisierte ich das MVP ein zweites Mal. Ich fügte eine automatische Klassifizierung hinzu, die auf den Tippfehlerraten in den Datenbanken und auf den Raten zufälliger Übereinstimmungen basierte. Ich implementierte in MATLAB ein statistisches Mischverteilungsmodell (wiederum auf der Grundlage der Arbeit von William E. Winkler). Dieses verwendeten wir, um automatisch Schwellenwerte für den String-Vergleich-Algorithmus zu identifizieren.

Insgesamt identifizierte das finale MVP potenzielle Kunden aus den persönlichen und beruflichen Netzwerken vorhandener Kunden. Dies ergab einen potenziellen neuen Markt von 1,7 Billionen USD.

300.000 USD und monatelange Entwicklungsarbeiten eingespart

Wie das Projekt zur Identifizierung potenzieller Kunden zeigt, konnten wir mit der Lean-Startup-Methode mit MATLAB schnell, kostengünstig und mit minimalem Risiko neue Ideen untersuchen. Statt einem Anbieter 300.000 USD für eine Standardlösung zu zahlen, erstellten wir unsere eigene Lösung in MATLAB. Da wir MATLAB schon für andere Projekte verwendeten, entstanden uns hierfür keine Zusatzkosten.

Ich führte den größten Teil der Entwicklungsarbeit selbst durch. Die Gesamtdauer der Entwicklung aller Versionen betrug ungefähr acht Wochen. Wenn ich Java oder C++ statt MATLAB verwendet hätte, hätte mich dasselbe Projekt sechs bis acht Monate gekostet. Ohne MATLAB hätte ich dieses Projekt nicht gewagt: Der einzuplanende Zeitaufwand und das Fehlschlagrisiko wären zu groß gewesen.

Veröffentlicht 2017 - 93087v00

Artikel für ähnliche Einsatzgebiete anzeigen

Artikel für verwandte Branchen anzeigen