FOLLOW US

Każda firma tworząca oprogramowanie doskonali swój proces wytwarzania oprogramowania, każda ma na to inny pomysł. Nie jest to zadanie łatwe, ponieważ zależy od wielu składowych np. dziedziny biznesowej, kultury organizacji, modelu współpracy, technologii i wielu wielu innych.

W tym artykule, przedstawimy nasze podejście do realizacji projektów (zasady pracy), które stara się wykorzystać najlepsze praktyki zaczerpnięte z Agile, Scrum, Kanban, Lean, CRISP DNA, Management 3.0 dostosowane do naszego kontekstu oraz nasze autorskie pomysły. Cały czas szukamy usprawnień i poprawy jakości naszej pracy.

W ISOLUTION mamy podział na zespoły merytoryczne np. Programiści, Analitycy, PMO/Scrum Master, Testerzy. Zespół projektowy budujemy w oparciu o ludzi z różnych zespołów merytorycznych. Każdy projekt tworzy specyficzną, zależną od kontekstu projektu “kulturę projektu”.

Rys. 1 Organizacja projektu

Każdy uczestnik projektu pełni w ramach projektu 1 lub wiele ról, z którymi wiążą się konkretne odpowiedzialności. Zarówno role projektowe, jak i odpowiedzialności są wypracowywane per projekt.

Dodatkowo każdy projekt na początek stara się skorzystać z:

  • wcześniej wytworzonych w ramach innych projektów rozwiązań (Rejestr Rozwiązań) np. moduł do wysyłania e-mail, szkielet aplikacji RWA/PWA, integracja z PayPal/Slackiem/JIRA, CI/CD itd.

  • Dobrych Praktyk, które pozwalają nam czerpać z wcześniejszych doświadczeń np.  DoD, DoR, zadanie < 1 MD itd.

  • zasad prowadzenia projektów, które określają ramy dla każdego zespołu, pozwalające inicjalnie rozpocząć projekt i dalej dostosować go do własnego kontekstu.

Każdy projekt korzysta z dowolnego zestawu Dobrych Praktyk, Zasad Realizacji projektów oraz gotowych rozwiązań. Oczywiście dostosowuje je do własnych potrzeb, rozszerza. Rejestr Rozwiązań oraz Dobre Praktyki to nasze wewnętrzne, budowane przez lata doświadczenie. W dalszej części artykułu skupię się na opisaniu Zasad Prowadzenia Projektów, które stanowi swoisty Manifest.

Rys. 2 Organizacja projektu - szczegóły

Tworząc zasady zgodnie z którymi chcemy pracować tworząc innowacyjne cyfrowe produkty dla naszych Partnerów staraliśmy się skupić na tym, żeby gwarantowały one dobrą jakość pracy oraz dostarczenie wartości biznesowej. Poniżej nasz Manifest z krótkim omówieniem.

I Projekt jest ważny dla Klienta

Chcemy mieć pewność, że projekt/produkt jest ważny dla Klienta, że ma wszystkie niezbędne zasoby na realizację projektu. Szczególnie istotne jest dla nas wyznaczenie przez Klienta konkretnej osoby, która będzie pełniła rolę Product Ownera.

II Pracujemy w metodykach zwinnych.

Bierzemy to co najlepsze z podejść SCRUM, Agile, Kanban, CRISP, Lean. Współpracę opieramy na partnerskich relacjach w oparciu o umowę Agile.

  • Rozliczamy się na podstawie TS po każdym Sprincie.

  • Klient może zrezygnować ze współpracy w każdym momencie z miesięcznym okresem wypowiedzenia.

III Nie jesteśmy najtańsi cenowo, ale najtańsi kosztowo.

Oznacza to, że nie chcemy konkurować najniższą stawką, a najniższym końcowym kosztem stworzenia produktu i dostarczenia wartości, która będzie wspierała biznes naszych Klientów.

IV Transparentność

Budujemy z Klientem relacje partnerskie oparte na zaufaniu. Klient ma ciągły dostęp do wszystkich artefaktów projektu. Na bieżąco jest informowany o stanie realizacji projektu. Istotne dla nas parametry projektu to: % realizacji zakresu, % realizacji budżetu, poziom zadowolenie z pracy zespołu (Happiness Index).

V Zespół jest ważny

Rozwój naszego zespołu oraz jego zadowolenie z pracy jest dla nas bardzo ważne. Wierzymy, że dobrze zbudowany, zmotywowany i zaangażowany zespół jest w stanie nawet średni pomysł przekształcić w świetne rozwiązanie.

Dbamy o to by proces formowania zespołu uwzględniał potencjał i kompetencje każdej osoby, jej styl osobowości, motywatory. Chcemy zapewnić zespołowi bezpieczeństwo psychologiczne oraz środowisko zapewniające możliwość popełnia błędów. Z naszego punktu widzenia projekty są robione przez ludzi, którzy są członkami zespołów projektowych. Zadbanie o dobre środowisko pracy dla nich jest krytyczne.

  • Zespół ma prawo do popełniania błędów.

Tworzenie produktów cyfrowych jest niepowtarzalne. Zespół musi mieć komfort pracy w warunkach, które daje przestrzeń na popełnianie błędów szybciej. Chcemy, żeby cały zespół skupiał się na jakości i dostarczaniu wartości, a nie ciągłym strachu przed popełnieniem błędu.

  • Wierzymy w efekt synergii.

Zespół to siła. Dobrze zbudowany zespół stanowi wartość. Cenimy bardziej zespół od indywidualności.

  • Mówimy o problemach, gdy je zauważamy.

Budujemy zespoły proaktywne, odpowiedzialne i zaangażowane. Stosujemy zasadę, że o problemach mówimy od razu, nie czekamy do ostatniej chwili.

  • Oszacowanie zespołu jest “święte”.

Ufamy, że zespół szacuje najlepiej jak potrafi w danym momencie, dysponując określoną wiedzą na temat zadania.

  • Pojemność osoby = 32h

Każda osoba ma na tydzień 32h pojemności, pozostałe godziny do wykorzystania na rytuały i komunikację.

VI Codzienna praca odbywa się wg. jasnych zasad

Lubimy jasne zasady. Stosując je możemy budować relacje oparte na zaufaniu i skupić się na jakości oraz dostarczaniu wartościowych produktów.

  • Backlog zadań na sprint jest stały.

Po zaplanowaniu Sprintu nie pozwalamy zmieniać zakresu. Jeżeli jest taka potrzeba, zmieniamy podejście na oparte o Kanban.

  • Każde zadanie jest zapisane i oszacowane.

Tylko takie zadanie dopuszczane są do realizacji.

  • Oszacowane zadania zajmują mniej niż 1 MD.

W szacowaniu zadań bierze udział cały zespół. Z naszej praktyki wynika, że wydzielanie mniejszych zadań możliwych do zrealizowania w 1 dzień roboczy, ułatwia planowanie prac i ich przebieg.

  • Dzień pracy developera (8h) to realnie 5 h pracy

Badania wskazują, że przy zadaniach kreatywnych efektywny czas pracy to max 5-6 h. Wierzymy w to. Wierzymy, że dostarczając naszym klientom wartościowe produkty musimy być kreatywni, wypoczęci i zaangażowani. Musimy mieć czas na chwilę przerwy, zabawy i relaksu.

  • Znamy kryteria odbioru zadania DoD 

Zasady wg. których uznajemy zadanie za odebrane ustalamy przed, a nie po realizacji.

  • Wypełniamy TS codziennie

Chcemy być w pełni transparentni wobec naszych Klientów. Codzienne wypełnianie TS przez wszystkich pozwala dbać o budżet przedsięwzięcia.

  • Codziennie dostarczamy działające oprogramowanie

Stosując CI/CD/Devops automatyzujemy procesy związane z wytwarzaniem oprogramowania.

  • DEMO robi Klient

Odbioru prac dokonuje nasz Klient. To on prowadzi DEMO.

  • Planowanie

Klient bierze udział w planowaniu. Jego zaangażowanie jest dla nas krytyczne.

  • Priorytety

To Klient decyduje o tym co jest ważne z punktu widzenia biznesu. To on reguluje kolejność i tempo prac.

  • Sprint

Standardowo pracujemy w Sprintach. Realizujemy w nim tyle zadań, ile wynika z pojemności zespołu.

  • Błąd w szacowaniu

Tworzenie produktów cyfrowych jest niepowtarzalne. To zadanie kreatywne, realizowane w zespole. Dlatego istotne jest dla nas zapewnienie zespołowi środowiska do pracy kreatywnej, w której nie będą bali się popełniać błędy szybciej, uczyć się na błędach, usprawniać proces, dbać o jakość, poprawiać i ulepszać kod. W tym celu pracujemy stosując zasadę, że w przypadku pojawienia się przekroczenia terminu realizacji Klient zgadza się na wydłużenie czasu realizacji lub zdejmuje zadanie z realizacji (opłacając dotychczasowy czas) i wrzucając zadania z powrotem do backlogu.

  • Oczekiwanie na prace 

Dbamy o dostarczenie wartości dla naszych Klientów i jakość naszej pracy. Dbamy też o rozwój naszego biznesu.

W przypadku oczekiwania na dostarczenie artefaktów przez Klienta (środowisko, wykonanie testów) ustalamy z Klientem jak wykorzystać ten czas. Klient płaci za ten czas.

 

Przedstawione powyżej zasady to model  do którego dążymy. Nie zawsze udaje się zastosować wszystkie zasady w każdym projekcie. Chcemy je jednak jasno komunikować i rozmawiać z nimi z naszymi partnerami.

Organizacja prac projektowych jest elementem naszej kultury. Będziesz mógł o niej przeczytać więcej w kolejnym wpisie na blogu oraz na naszej stronie. #staytuned



Happiness Index daje: przestrzeń do przekazywania dwustronnego feedbacku w trybie ciągłym, wpływa na budowanie trwalszych relacji na linii pracownicy-pracodawca, podnosi poziom zaangażowania, przyczynia się do obniżenia rotacji, co w efekcie przekłada się na budowanie przewagi konkurencyjnej firm, które Happiness Index mierzą. Co więcej, w dobie wszechobecnej pracy zdalnej daje większe poczucie bezpieczeństwa, a także przestrzeń do dialogu oraz realnego wsparcia, którego wielu z nas w tym czasie potrzebuje.

Zacznijmy jednak od początku. Co to jest ten Happiness Index i o co w nim chodzi?

Źródło koncepcji Happiness Indexu

Koncepcja Happiness Indexu wywodzi się… z Buthanu. Kraju, w którym w 1972 roku po raz pierwszy zaczęto mówić o szczęściu jako o mierzalnym czynniku, który w kontekście zadowolenia z życia jest ważniejszy niż dobrostan, komfort i ekonomiczny wzrost kraju, w którym się żyje. 

Od kilku lat Happiness Index jest obecny globalnie w kontekście warunków do życia w poszczególnych państwach, ale także z powodzeniem jest mierzony w kontekście pracy, w której spędzamy większość naszego życia. Dlaczego poczucie szczęścia jest takie ważne?

Szczęście w pracy

Zadowolenie z pracy przekłada się na większą pewność siebie, skuteczniejsze podejmowanie decyzji, a w związku z tym również na produktywność. Kiedy jesteśmy zadowoleni, kiedy czujemy się dobrze w pracy,  szybciej i lepiej wykonujemy swoje zadaniałatwiej budujemy relacje w zespole, który w efekcie lepiej pracuje. Angażujemy się również chętniej w życie firmy i utożsamiamy się z nią. Szybciej również uczymy się i rozwijamy.

O co chodzi w Happiness Index'ie?

W zależności od specyfiki firmy oraz branży możemy przyjmować różne wymiary zadowolenia, które wpływają na nasze poczucie szczęścia. Możemy mierzyć np.:

  • zadowolenie z pracy w firmie,

  • zadowolenie z pracy z danym klientem/w danym zespole,

  • zadowolenie z wykonywanych zadań.

Najlepsze efekty uzyskamy porównując wyniki w dłuższych okresach czasu zarówno w kontekście danej osoby, całego zespołu, jak i całej firmy.

Jak mierzyć Happiness Index?

To zależy do tego, jaki mamy cel. Warto go mierzyć nie rzadziej niż raz na miesiąc. Optymalnie raz w tygodniu. Dlaczego? Czekając zbyt długo z reakcją, możemy przegapić najlepszy moment na interwencję i w efekcie stracić zaufanie, zaangażowanie, a w skrajnym przypadku nawet samego pracownika.

Jak reagować na Happiness Index?

Szybko. Pozytywny efekt może przynieść nawet sama próba nawiązania rozmowy i sygnał, że widzimy i zajmujemy się sprawą. Nie zawsze będziemy w stanie sami coś poradzić na pojawiające się wyzwanie, ale dzięki szybkiej reakcji pokażemy, że nam zależy. To czasami wystarczy, co jest ważne zwłaszcza w sytuacji, w której z obiektywnych względów nie damy rady poradzić sobie z danym wyzwaniem.

5 praktycznych wskazówek na koniec

  1. Zastanów się, jakie czynniki mają największy wpływ na poziom zadowolenia w Twojej organizacji i w oparciu o nie skonstruuj swój Happiness Index (HI).

  2. Szybko reaguj na pojawiające się spadki poziomu zadowolenia. Zauważaj jednak  także wzrosty. Osoby z wysokim, lub rosnący Happiness Indexem chętniej zaangażują się w życie firmy, zespołu i mogą stanowić dla Ciebie silne źródło wsparcia.

  3. Transparentna komunikacja to podstawa. Ludzie docenią Twoje zaangażowanie nawet w sytuacji, w której finalnie niewiele da się zrobić.

  4. Mów o tym, co udało się zrobić dzięki HI. Poproś o to w miarę możliwości również osoby, które uzyskały wsparcie. Dzięki temu ludzie chętniej będą ustawiać swoje Happiness Index’y.

  5. Podczas pracy zdalnej skorzystaj z Happiness Indexu nie tylko do zbierania feedbacku, ale również okazywania wsparcia, zainteresowania oraz rozmowy na temat potrzeb, które pojawiają się wraz z pracą zdalną.

Więcej informacji na temat narzędzi wspierających pracę zdalną, które możesz wykorzystać do pracy ze swoim zespołem, znajdziesz tutaj.

Wstęp

Branża ubezpieczeniowa oferuje bardzo szeroką gamę produktów, takich jak ubezpieczenia indywidualne, grupowe, komunikacyjne i wiele innych. Każde z nich wymaga przestrzegania innych procedur, wymogów prawnych oraz analizy różnego typu informacji zarówno przy sprzedaży polis, jak i przy wypłacie należnych roszczeń.

Generuje to wiele procesów, które obsługiwane ręcznie zajmują dużo czasu. Stąd wynika rosnące zainteresowanie tej branży wykorzystaniem algorytmów sztucznej inteligencji.

Nawet częściowa automatyzacja obsługiwanych w firmie procesów może znacząco zmniejszyć czas pracy nad pojedynczą ofertą ubezpieczeniową. Pozwoli także na optymalizację jej parametrów i zmniejszenie kosztów wynikających z ewentualnych roszczeń.

W tym artykule chciałabym przedstawić kilka obszarów, w których można wdrożyć algorytmy sztucznej inteligencji oraz przykładowe wyniki, jakie udało nam się uzyskać w niektórych z nich.

Wykorzystanie algorytmów sztucznej inteligencji w ubezpieczeniach

W przypadku szkody komunikacyjnej ustalenie kwoty wypłacanej z ubezpieczenia wymaga analizy stopnia uszkodzenia każdej części auta. Często rzeczoznawca dokonuje oceny na podstawie zdjęć przedstawiających poszczególne części samochodu. Następnie na tej podstawie szacowana jest wysokość wypłacanego świadczenia.

Wykorzystanie algorytmów analizy obrazów i sztucznej inteligencji może wspomóc rzeczoznawcę w procesie oceny stopnia uszkodzenia konkretnych części samochodu.

Aplikacja Proof of Concept, którą stworzyliśmy wraz z zespołem, pozwala na zidentyfikowanie i oznaczenie konkretnych części samochodu znajdujących się na zdjęciach oraz przypisanie każdej z nich estymowanego stopnia uszkodzenia. Dodatkowymi funkcjami, dostępnymi z poziomu aplikacji, mogłyby być: znalezienie najbliższego serwisu, wezwanie lawety, czy znalezienie samochodu zastępczego.

[Wykorzystane zdjęcie samochodu: : https://www.pxfuel.com/en/free-photo-qfmwd]

Tworzenie ofert ubezpieczeniowych dla nowych klientów wymaga analizy wielu czynników. Dla ubezpieczeń grupowych są to na przykład: struktura osób zatrudnionych w firmie, profil działalności, region, w którym firma ma siedzibę.

Dodatkowo sprzedawca musi przestrzegać szeregu reguł przy konstruowaniu takiej oferty, tak aby była ona zarówno korzystna dla firmy jak i atrakcyjna dla klienta.

W tym przypadku sztuczna inteligencja może zostać wykorzystana jako swoisty system rekomendacji, który pomoże sprzedawcy dobierać odpowiednie opcje dla konkretnego klienta. System taki umożliwia znaczne przyspieszenie i ułatwienie pracy przy konstruowaniu oferty.

Poniżej znajdują się przykładowe  wyniki rekomendacji w przypadku, gdy znamy wiek i płeć klienta (51 letni mężczyzna, 37 letnia kobieta, 39 letni mężczyzna). W tym rozwiązaniu sprzedawca zaznacza kilka opcji (wiersz: masked), a na tej podstawie system proponuje inne, które powinny znaleźć się w polisie (wiersz: recommendation).

Pierwszy wiersz w każdej z grup oznacza oryginalną polisę, która została zaakceptowana przez klienta.

Dodatkowo na podstawie historycznych danych pokazujących, jakie polisy są akceptowane przez  klientów, a jakie nie, mógłby on jeszcze lepiej dobierać konfigurację proponowanych ofert, zwiększając tym samym skuteczność sprzedaży nowych polis.

Propozycje zmiany warunków polisy ubezpieczeniowej najczęściej są przedstawiane, gdy zbliża się termin końcowy obecnej umowy lub kiedy coś złego dzieje się z polisą (np. występuje dużo zdarzeń, generujących większe niż przewidywaliśmy wypłaty odszkodowań). W takich przypadkach najczęściej proponuje się::

– podwyższenie składek z zachowaniem dotychczasowych warunków polisy,

– zachowanie wysokości składki, ale ze zmianami w zakresie polisy zgodnie z rekomendacjami przedstawionymi przez underwritera na podstawie historii zdarzeń.

Wykorzystanie algorytmów sztucznej inteligencji w tym procesie mogłoby wspomóc pracę nad skonstruowaniem nowej oferty, poprzez wskazanie co w danej polisie najlepiej byłoby zmienić tak, aby zminimalizować ryzyko dla firmy ubezpieczeniowej przy jednoczesnym zachowaniu jak najbardziej korzystnej oferty z punktu widzenia Klienta.

Podsumowanie

W artykule przedstawiłam przykładowe zastosowanie algorytmów sztucznej inteligencji w branży ubezpieczeniowej. Warto podkreślić, że poza omówionymi powyżej przypadkami, można wymienić również inne, takie jak: chatbot obsługujący klientów, szacowanie ryzyka, czy wykrywanie prób oszustw i wyłudzeń.

Te trzy przykłady mogą być wykorzystane zarówno w branży ubezpieczeniowej, jak i w wielu innych np. w branży finansowej, co opisałam szerzej w artykule Wykorzystanie AI w branży finansowej.

Wszystkich zainteresowanych zapraszam do rozmowy przez mój profil na LI, a także śledzenia naszych wpisów na blogu Isolution oraz naszych firmowych profilach na LI i FB.

Katarzyna Roszczewska

Rozpoczynając przygodę z algorytmami sztucznej inteligencji, warto postawić sobie dwa podstawowe pytania:

  1. Jaki problem chcielibyśmy rozwiązać?
  2. Jak zbudować model, który nam to umożliwi?

Jeśli chodzi o pierwsze pytanie, to ogranicza nas jedynie wyobraźnia i dostępność danych, które możemy wykorzystać do uczenia modelu. Jeśli chodzi o pytanie drugie to wybór modelu zależy w znacznej mierze od rozwiązywanego problemu, zasobów sprzętowych jakimi dysponujemy oraz czasu, w jakim chcielibyśmy skończyć nasze zadanie.

Najlepiej to pokazać na przykładach. Załóżmy, że chcemy stworzyć algorytm  wspomagający poprawną segregację odpadów na podstawie zdjęcia. Jeśli chodzi o sam dobór algorytmu, to w tym przypadku mamy kilka opcji. Możemy wykorzystać lasy losowe drzew decyzyjnych lub maszynę wektorów nośnych po uprzednim wyekstrahowaniu odpowiednich cech z obrazu. Możemy też wykorzystać splotowe sieci neuronowe, które operują bezpośrednio na danych obrazowych. Architekturę takiej sieci możemy zaprojektować sami,na wstępie warto jednak rozważyć adaptację gotowego modelu, co pozwoli nam zaoszczędzić dużą ilość czasu. Ja do rozwiązania przyjętego problemu zdecydowałam się wykorzystać wstępnie nauczone modele sztucznych sieci neuronowych. Jak będzie to wyglądało w praktyce? Przeprowadzę Was przez ten proces krok po kroku.

Analiza i przygotowanie danych

Zbiór danych, z którego postanowiłam skorzystać, znajduje się na stronie: Garbage Classification. Zawiera on zdjęcia odpadów podzielonych na 6 kategorii: karton, szkło, metal, papier, plastik i odpady zmieszane. Ostatnia kategoria zawiera zdjęcia przedmiotów, które w większości mogłyby zostać przyporządkowane do 5 pozostałych grup. Z tego względu wykluczamy ją z dalszej analizy. Poniżej przedstawiony został wykres, na którym widać liczbę zdjęć dostępnych dla każdej z klas.

Bardzo ważnym etapem przygotowania zbioru danych jest jego podział na co najmniej dwa podzbiory: treningowy i walidacyjny. Jeszcze lepszą praktyką jest stworzenie trzech rozłącznych zbiorów danych: treningowego, walidacyjnego i testowego. W tym przypadku rezultaty prezentowane na zbiorze testowym są reprezentatywne i pokazują rzeczywistą skuteczność systemu dla nowych, niewidzianych przez niego wcześniej zdjęć. W moim przypadku 60% zdjęć posłużyło do treningu, 20% stanowiło zbiór walidacyjny, a kolejne 20% trafiło do zbioru testowego. Poniżej znajdują się przykładowe zdjęcia dla każdej z klas. Każde zdjęcie ma rozmiar 512 x 384 pikseli. W przypadku wykorzystywania gotowej sieci neuronowej bardzo ważne jest dostosowanie rozmiaru obrazów w zbiorze do rozmiaru danych wejściowych akceptowanych przez sieć. W przypadku sieci Xception[1] rozmiar warstwy wejściowej to 299 x 299, natomiast w przypadku sieci VGG16[2] rozmiar ten wynosi 224 x 224. Z tego też względu przed przystąpieniem do nauki modelu musimy przeskalować nasze obrazy.

Przygotowanie i trenowanie modeli

Do rozwiązania problemu jaki sobie postawiłam, wykorzystałam dwie, popularne architektury sieci: VGG16 oraz Xception. Obydwa wybrane przeze mnie modele uczone były na zbiorze  ImageNet[1], który zawiera zdjęcia obiektów należących do 1000 klas. W związku z powyższym warstwa wyjściowa, odpowiedzialna za klasyfikację wejściowego obrazu posiada 1000 wyjść. W przypadku analizowanego przeze mnie problemu wielkość warstwy wyjściowej powinna wynosić 5. Poniżej znajduje się kod, który umożliwia przystosować wstępnie przetrenowany model do mojego zbioru danych.

# model adaptation
20   base_net = tf.keras.applications.xception.Xception(weights='imagenet')
21   # base_net=tf.keras.applications.vgg16.VGG16(weights='imagenet')
22   base_net_input = base_net.get_layer(index=0).input
23   base_net_output = base_net.get_layer(index=-2).output
24   base_net_model = models.Model(inputs=base_net_input, outputs=base_net_output)
25   
26   for layer in base_net_model.layers:
27      layer.trainable = False
28   
29   new_xception_model = models.Sequential()
30   new_xception_model.add(base_net_model)
31   new_xception_model.add(layers.Dense(5, activation='softmax', input_dim=2048))

Ze względu na niezbyt duży zbiór danych przy uczeniu modelu zastosowałam zwiększenie liczby danych uczących (ang.data augmentation). Poniżej znajduje się fragment kodu, odpowiedzialnego za trening wybranego modelu

# hyperparameters
34   base_learning_rate = 0.0001
35   opt = optimizers.SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)
36   
37   new_xception_model.compile(optimizer=opt,
38                             loss='sparse_categorical_crossentropy',
39                             metrics=['accuracy'])
40   
41   # data preparation and augmentation
42   train_data_gen = ImageDataGenerator(
43      rescale=1. / 255,
44      shear_range=0.2,
45      zoom_range=0.2,
46      horizontal_flip=True)
47   
48   valid_data_gen = ImageDataGenerator(rescale=1. / 255)
49   
50   train_generator = train_data_gen.flow_from_directory(
51      directory='training_data',
52      target_size=img_dim,
53      color_mode="rgb",
54      batch_size=batch_size,
55      class_mode="sparse",
56      shuffle=True,
57      seed=42
58   )
59   
60   valid_generator = valid_data_gen.flow_from_directory(
61      directory='validation_data',
62      target_size=img_dim,
63      color_mode="rgb",
64      batch_size=batch_size,
65      class_mode="sparse",
66      shuffle=True,
67      seed=42
68   )
69   
70   # model training
71   garbage_recognition_model = new_xception_model.fit_generator(generator=train_generator,
72                                                               validation_data=valid_generator,
73                                                               epochs=epochs,
74                                                               callbacks=[checkpoint, tensorboard_callback, earlyStop]
75                                                               )
76   

Podczas trenowania wybranych modeli zastosowałam wczesne zatrzymanie uczenia (ang. early stopping). Polega ona na tym, że jeśli skuteczność rozpoznawania zdjęć ze zbioru walidacyjnego nie wzrasta przez określoną liczbę epok, to uczenie zostaje przerwane. Stosowanie tego typu podejścia zmniejsza ryzyko dopasowania modelu do danych uczących (ang. overfitting). Poniżej przedstawione zostały krzywe uczenia dla zbioru treningowego i walidacyjnego. Widoczne jest, że w tym przypadku znacznie lepiej poradziła sobie sieć Xception, pozwalając na uzyskanie ponad 80% skuteczność rozpoznawania zdjęć ze zbioru walidacyjnego.

Skuteczność stworzonych rozwiązań

Jak wspominałam wcześniej określenie rzeczywistej skuteczności naszego modelu najlepiej wykonać na nowym zbiorze danych, które nie brały udziału w uczeniu naszych modeli. Dlatego też poniżej przedstawiłam wyniki, jakie udało się uzyskać na zbiorze testowym. Zbiór ten zawierał 480 zdjęć. Wyniki potwierdzają wniosek, że w tym przypadku znacznie lepiej poradził sobie model bazujący na wstępnie przetrenowanej sieci Xception. Uzyskała ona skuteczność 83%, czyli o niemal 10 punktów procentowych więcej niż model oparty o architekturę VGG16.

VGG16

ACC = 74%

Xception

ACC = 83%

Podsumowanie

Artykuł pokazuje, w jaki sposób wykorzystać wstępnie przetrenowane architektury sieci w konkretnym problemie, który chcemy rozwiązać. Opisuje on pokrótce proces analizy i przygotowania danych, zaadaptowania gotowych modeli do swoich potrzeb oraz metody oceny skuteczności stworzonego rozwiązania.

Jest to pierwszy z serii artykułów przeznaczony dla osób chcących rozpocząć swoją przygodę z wykorzystywaniem algorytmów sztucznej inteligencji. Serdecznie zapraszam do śledzenia naszych wpisów na blogu Isolution oraz naszych firmowych profili na LI i FB, a także do zapisania się do naszego newslettera.

Według raportu dotyczącego wykorzystania sztucznej inteligencji w obszarach BSFI[1] (bankowość, usługi finansowe, ubezpieczenia) wartość tego obszaru rynku wynosiła2.5 miliarda dolarów w 2017 roku. Prognozy pokazują, że do 2024 może ona osiągnąć nawet 25 miliardów dolarów. Firmy z obszaru szeroko pojętych usług finansowych inwestują w rozwiązania wykorzystujące sztuczną inteligencję, które pozwalają na zwiększenie ich zysków poprzez budowanie atrakcyjnej i konkurencyjnej oferty, a także optymalizację procesów. W tym artykule chciałabym opowiedzieć o tym, dlaczego sztuczna inteligencja stała się tak popularna na przestrzeni ostatnich kilkudziesięciu lat oraz pokazać, w jakich obszarach według mnie może być ona wykorzystana w branży finansowej.

AI, dlaczego teraz?

Termin “sztuczna inteligencja” został użyty po raz pierwszy w roku 1956 przez Johna McCarthy’ego, który określił nim “konstruowanie maszyn, o których działaniu dałoby się powiedzieć, że są podobne do ludzkich przejawów inteligencji”. Od momentu zdefiniowania sztucznej inteligencji do momentu, w którym zaczęliśmy ją aktywnie wykorzystywać do rozwiązywania zagadek, a z czasem problemów biznesowych, minęło nieco ponad 40 lat. W roku 1997, wielokrotny mistrz świata w szachach Garry Kasparov został pokonany przez komputer. To był moment, w którym pojawiło się wiele dyskusji wokół sztucznej inteligencji i jej możliwych zastosowań. Nieco ponad 20 lat później, w 2019 roku, sieć neuronowa DeepCubeA[2] ułożyła kostkę rubika w 1.2 s,, wykonując to zadanie trzykrotnie szybciej od najlepszych w tej dziedzinie ludzi. To był dowód na to, jak bardzo algorytmy sztucznej inteligencji rozwinęły się przez ostatnie lata oraz przykład możliwości, jakie daje AI w zakresie optymalizacji procesów.

W dzisiejszych czasach algorytmy sztucznej inteligencji wykorzystywane są do rozwiązywania coraz większej liczby problemów z różnych dziedzin naszego życia, od rozpoznawania obrazów po autonomiczne kierowanie pojazdami. W ostatnich latach obserwujemy coraz większe zainteresowanie tym tematem przez firmy z wielu branż. Jednak skoro termin ten jest znany już od niemal 70 lat, to dlaczego dopiero teraz mamy do czynienia z tak ogromnym postępem w tym zakresie? Powodów jest kilka:

Wykorzystanie algorytmów sztucznej inteligencji w bankowości

Branża finansowa charakteryzuje się dostępem do ogromnych zasobów danych. Wykorzystanie algorytmów z zakresu sztucznej inteligencji pozwala na stworzenie rozwiązań, które będą stanowiły o konkurencyjności firmy na rynku, a także pozwolą na optymalizację procesów.

Jakich konkretnie? Oto kilka pomysłów:

a. system rekomendacji

Rekomendowanie odpowiednich produktów obecnym lub potencjalnym klientom w oparciu o analizę ich zachowań, jest bardzo ważnym elementem sprzedaży i dosprzedaży wielu firm, między innymi banków. . Poza oczywistymi zyskami finansowymi idzie za tym również potencjalne zadowolenie klientów, którzy nie czują się zarzucani losowymi reklamami produktów, a traktowani indywidualnie.

Doskonałym przykładem pokazującym, jak dużą rolę w zdobywaniu klientów i ich zaufania do marki pełni personalizacja, jest serwis Netflix. Algorytmy uczenia maszynowego Netflixa na podstawie dostępnych informacji nie tylko proponują nam tytuły, które potencjalnie będziemy chcieli obejrzeć, ale również dobierają zwiastuny filmów oraz seriali, które widzimy na stronie głównej zaraz po zalogowaniu.  Jeśli nasz profil pokazuje, że lubimy filmy z udziałem Henry’ego Cavila, prawdopodobnie zobaczymy propozycję serialu z Jego udziałem, a na stronie głównej pojawi nam się jego zwiastun z postacią aktora[3]

Analogicznie, w branży bankowej proponowanie odpowiednich produktów może być oparte na szeregu informacji, takich jak: profil behawioralny konsumenta czy informacje o produktach, które mamy w ofercie.

b. personalny asystent

Kolejnym przykładem zastosowania algorytmów sztucznej inteligencji do rozwiązań usprawniających pracę banku, ale też budujących pozytywną opinię o nas wśród klientów, jest chatbot, lub w bardziej rozbudowanej wersji, personalny asystent. Zaletą systemów tego typu jest ich całodobowa dostępność oraz natychmiastowa odpowiedź na najczęściej zadawane przez klientów pytania. Daje to szereg korzyści, z których za najważniejsze można uznać:

Dodatkowo w takim rozwiązaniu możliwe jest proponowanie klientowi najkorzystniejszych dla niego ofert w kontekście jego preferencji i nawyków, a także pomoc w zarządzaniu jego budżetem domowym np. poprzez wyszukiwanie i wysyłanie informacji o subskrypcjach, o których być może zapomniał.

c. wspomaganie operacji giełdowych

Innym przykładem wykorzystania algorytmów w kontekście sektora finansowego jest wspomaganie decyzji giełdowych, Każdy inwestor zanim podejmie decyzję o inwestycji, staje przed koniecznością analizy szeregu czynników mających wpływ na cenę akcji i przyszłe zyski.

Algorytmy sztucznej inteligencji pozwalają na skrócenie czasu monitorowania tych niekiedy setek czynników, wskazują również informacje istotne z punktu widzenia potencjalnych działań, które chcemy podjąć.

Odpowiednio przygotowane rozwiązania umożliwiają rozpoznawanie wzorców występujących na rynku, a także prognozowanie cen interesujących nas akcji.

d. szacowanie ryzyka

W branży finansowej jednym z najważniejszych czynników bezpośrednio przekładającym się na posiadany kapitał jest odpowiednie oszacowanie różnego rodzaju ryzyk, takich jak na przykład:

W tym obszarze również możliwe jest wykorzystanie algorytmów sztucznej inteligencji, które pomogą nam na podstawie danych dotyczących klienta takich jak chociażby jego historia finansowa czy wiarygodność kredytowa oszacować potencjalne ryzyko wejścia z nim we współpracę lub udzielenia mu pożyczki. Warto tutaj dodać, że w tym przypadku możliwe jest wykorzystanie również różnego typu danych alternatywnych, takich jak: regularność w dokonywaniu opłat nie uwzględnionych w historii finansowej czy  publicznie dostępne dane z mediów społecznościowych, które budują wiarygodność potencjalnego klienta bądź współpracownika. W tym przypadku ważne jest również to, aby podejmowane przez nas decyzje były transparentne dlatego konieczne jest wykorzystanie modeli interpretowalnych. Wykorzystanie tego typu modeli przy szacowaniu chociażby wiarygodności kredytowej wpływa na budowanie zaufania klientów do firmy, ze względu na to, że podejmowane decyzje są sprawiedliwe, nie zależą od interpretacji człowieka i są w pełni weryfikowalne.

e. wykrywanie prób oszustw i wyłudzeń

Kolejnym kluczowym obszarem, w którym warto rozważyć wykorzystanie algorytmów sztucznej inteligencji jest detekcja potencjalnych oszustw lub wyłudzeń finansowych. W tym przypadku tak jak w przypadku szacowania ryzyk każda źle podjęta decyzja generuje duże straty finansowe oraz zachwianie zaufania klientów do marki. Tutaj też bardzo ważne jest stworzenie profilu zachowań typowych dla klienta w oparciu o jego historię finansową. Na tej podstawie możliwe jest odróżnienie zleceń bankowych generowanych przez klientów od tych, które generują boty czy wykrywanie podejrzanej aktywności na koncie klienta.

Podsumowanie

Przykłady przedstawione powyżej są jedynie skrótowym opisem możliwych zastosowań sztucznej inteligencji w branży finansowej, jednak dają dobry punkt odniesienia. Temat ten jest bardzo obszerny, dlatego jeden artykuł nie wystarczy, żeby pokazać pełnię możliwości, jakie dają algorytmy sztucznej inteligencji w kontekście zastosowania w branży finansowej. Z tego też względu planujemy publikację kolejnego artykułu, w którym mój kolega z zespołu opowie o konkretnych przypadkach i projektach, które mieliśmy okazję realizować dla klientów z tego obszaru. Wszystkich zainteresowanych zapraszamy do śledzenia naszych wpisów na blogu Isolution oraz naszych firmowych profilach na LI i FB.

[1] https://www.gminsights.com/industry-analysis/artificial-intelligence-ai-in-bfsi-market

[2] https://www.theregister.co.uk/2019/07/16/ai_rubiks_cube/

[3] https://netflixtechblog.com/artwork-personalization-c589f074ad76

W poprzednim wpisie poruszyłem temat autoenkoderów. Warto wdrożyć tę wiedzę w życie. Wyobraźmy sobie system, gdzie komunikacja między serwisami odbywa się za pomocą Kafki. W trakcie życia systemu okazało się, że niektóre z tych zdarzeń są całkiem szkodliwe. Musimy je wykryć i przerzucić na osobny proces, gdzie zostaną dokładnie zbadane.

Wyjdźmy od paru założeń:

Przetwarzanie zdarzeń z Kafka Streams

Kafka Streams jest biblioteką pozwalająca na przetwarzanie danych pomiędzy topikami. Pierwszym krokiem jest wpięcie się do [all_events] i zbudowanie topologi procesu.

Filtrując po kluczu, zdarzenia kierowane są na dedykowane topiki, gdzie zostaną odpowiednio obsłużone.

Autoenkoder w DL4J

Biblioteka pozwala na wykorzystanie gotowych modeli zbudowanych w Kerasie. Jest to fajne rozwiązanie, gdy zespół AI pracuje w TF/Keras i on odpowiada za budowę i dostosowywanie modeli. W tym przypadku pójdziemy inną drogą, stworzymy i wytrenujemy autoenkoder w Javie.

Zdarzenia mają analogiczną budowę i wartości, jak w przykładzie z poprzedniego wpisu. Podzielone zostały na dwa pliki CSV [normal_raw_events.csv] oraz [anomalous_raw_events.csv]

Przychodzące dane są nieznormalizowane. Budujemy dedykowany NormalizerMinMaxScaler, który przeskaluje wartości do zakresu [0.0-1.0].

Wytrenowany normalizer posłuży jako pre-procesor dla dedykowanego iteratora, który porusza się po pliku [normal_raw_events.csv].

Autoenkoder będzie posiadał analogiczną budowę jak przywołany przykład w Kerasie.

Model i normalizer zostaje zapisany. Docelowo powinny znaleźć się na dedykowanym zasobie, z którego działająca aplikacja pobrałaby i zbudowała swoją konfiguracje.

Wytrenowany model może wykazać się średnim błędem rekonstrukcjidla typowych zdarzeń na poziomie 0.0188, natomiast dla anomalii na poziomie 0.0834. Rzucając MSE dla 100 zdarzeń z dwóch grup na wykres, możemy określić próg odcięcia na poziomie [threshold=0.045].

Kafka Stream Autoenkoder Transformer

By zapiąć model w topologie procesu wykorzystam interfejs ValueTransformer zaimplementowany w klasie AnomalyDetection. W konstruktorze powołujemy do życia model wraz z normalizerem oraz klasy pomocne w obliczeniu błędu rekonstrukcji.

Metoda transform otrzymuje zebrane w oknie zdarzenia. Muszą zostać one zmapowane na format zrozumiały dla modelu [INDArray]. Dla każdego ze zdarzeń obliczany jest błąd rekonstrukcji. Te, które przekroczą próg otrzymują klucz ANOMALOUS.

Podsumowanie

Materiały

Mateusz Frączek, R&D Division Leader

Anomalie w systemach zdarzają się rzadko. Na straży “biznesowej poprawności” stoją warstwy walidacji, które patrząc na parametry zdarzeń, są w stanie wyciągnąć je z procesu. Żądanie wypłaty gotówki w niestandardowym dla właściciela karty miejscu, czy odczyt z sensora przekraczający normy można weryfikować bazując na profilach, czy danych historycznych. Co jeśli jednak zdarzenie na pierwszy rzut oka nie odbiega tak bardzo od normy?

Wielowymiarowa natura danych

Anomalie nie są łatwe do wykrycia. Często wartości przyjętych cech subtelnie odbiegają od prawidłowego rozkładu, a czasem ich odchylenie od normy jest zauważalne dopiero przy uwzględnieniu serii zdarzeń i charakterystyk czasowych. W takich przypadkach standardowym podejściem jest analiza cech pod kątem np. ich wzajemnej korelacji. Bardzo fajnie do tego problemu podszedł Mirek Mamczur w swoim wpisie.

Na nasze potrzeby wygenerujemy sztuczny zbiór danych, gdzie jedną z klas uznamy za anomalie. Zdarzenia będą posiadały 15 cech, które skupione zostaną dosyć blisko siebie z odchyleniem standardowym na poziomie 1.75.

By zmusić model do większego wysiłku możemy wymusić generowanie danych bliżej, zmniejszając [center_box].

Autoenkoder (undercomplete)

Ciekawą cechą tej architektury jest jej umiejętność zakodowania danych na ich reprezentacje z mniejszą liczbą cech (latent representation). W trakcie nauki miarą wiernego odtworzenia danych wejściowych jest błąd rekonstrukcji.

Mając n-wymiarowy x, enkoder f(x) = h kompresuje x do jego m-wymiarowej postaci h gdzie m< n. Dekoder będzie się starał odtworzyć dane do oryginalnej liczby wymiarów g(h) = ~x. Miarą wierności odtworzenia jest wartość funkcja straty L(x , g(f(x))), im ona mniejsza, tym nasze ~x jest bliższe x.

Idąc tym tropem, gdy do nauki modelu przyjmiemy prawidłowe zdarzenia w naszym systemie, model powinien wyciągnąć z nich cechy i na ich bazie odtworzyć zdarzenie z pewnym przybliżeniem. Gdy do modelu trafi zdarzenie anormalne, błąd rekonstrukcji powinien być zauważalnie większy ze względu na inną charakterystykę danych.

Keras

Przy pomocy Pandas’a budujemy DataFrame zawierający dane testowe. Po przeskalowaniu 20% z nich przeznaczonych zostanie na walidacje.

W przypadku niektórych modeli i problemów, które rozwiązują, (np. klasyfikacja z wykorzystaniem CNN) zwiększenie głębokości może pomóc wydobyć z danych większą ilość informacji. Zbyt głębokie Autoencodery nauczą się kopiować X w Y bez zbudowania ich skompresowanej reprezentacji, na której nam zależy. Warto na tym przykładzie sprawdzić, jak będzie się zmieniał MSE, gdy zwiększymy głębokość oraz gdy zredukujemy liczbę neuronów.

Model został przetrenowany na 100 epokach. Powyżej tej wartości nie wykazywał tendencji do poprawy i wynik ustabilizował się na poziomie

0.017–0.018 MSE.

Na wykres naniesiemy próg odcięcia [threshold=0.035] powyżej którego będziemy klasyfikować zdarzenia jako podejrzane.

Taki kawałek kodu po modyfikacjach może zostać wpięty do systemu i służyć jako walidator. Wszystko z MSE ≥threshold poleci na dedykowaną kolejkę podejrzanych zdarzeń wymagających analizy, reszta będzie obsługiwaną standardowym flow.

Podsumowanie

W przykładach wykorzystałem sztucznie wygenerowany zbiór danych przeznaczony do klasteryzacji. Dane dla dwóch klas posiadały cechy z zauważalnym rozrzutem między sobą, co pomagało modelowi w trakcie nauki wykryć różnice w Wrealnych sytuacjach tylko niektóre z cech będą odbiegać od normy. Autoenkodery są jedną z możliwości oceny zdarzenia i powinniśmy stosować je razem z innymi algorytmami.

Materiały

Mateusz Frączek, R&D Division Leader

W dzisiejszych czasach większość przedsiębiorców zdaje sobie sprawę z potencjału marketingowego jaki niesie ze sobą wykorzystywanie najnowszych rozwiązań technologicznych oraz dostrzega konieczność rozwoju i inwestowania w nie. Kluczową składową sukcesu w biznesie, która pozwala generować zyski i zmniejszać wydatki, jest umiejętność bieżącego podążania za rynkiem i dopasowanie do jego realiów. Niekiedy jednak przedsiębiorcy nie wyobrażają sobie w jaki sposób mogliby wykorzystać nowe, skomplikowane technologie i jak mogą one być zastosowane w procesach biznesowych ich działalności, które wydają się nie mieć żadnego związku z hasłami takimi jak sztuczna inteligencja. Coraz więcej nowych możliwości i rozwiązań pojawia się obecnie niemal z miesiąca na miesiąc i aby sporządzić wyczerpującą listę możliwości, potrzeba by napisać raczej książkę zamiast artykułu. Warto zatem skorzystać z konsultacji, jakie możemy zaoferować, aby wspólnie wypracować nowe rozwiązania, dające wartość w kontekście Państwa biznesu. Na naszym blogu pojawiają się wpisy o zastosowaniach sztucznej inteligencji w różnych branżach i szczerze zachęcam do zapoznania się z nimi. Zaś w tym artykule postaram się przybliżyć kilka kluczowych zagadnień, które stanowią pierwszy krok na drodze do wdrożenia sztucznej inteligencji w każdej firmie.

 Do nowych technologii, które z całą pewnością są warte wzięcia pod uwagę, należą sztuczne sieci neuronowe oraz uczenie maszynowe. Dają one niesamowite możliwości w przetwarzaniu różnego rodzaju danych, usprawniając wiele czynności, czy też dając wartościowe spostrzeżenia, które można wykorzystać do zwiększenia zysków. Do takich spostrzeżeń, uzyskanych dzięki algorytmom sztucznej inteligencji należeć mogą przykładowo wnioski w postaci – “do tego typu klientów musimy adresować inne rozwiązania, aby zwiększyć sprzedaż”. Wspomniane dane to mogą być dokumenty, obrazy, dźwięki, nagrania, czy też tabele bazy danych. Ważne jest jednak, aby zbudować świadomość osób chętnych do inwestowania w tę kategorię algorytmów, odnośnie do wymagań, jakie muszą zostać spełnione, aby inwestycja ta była skuteczna. Warto odpowiedzieć sobie skrupulatnie na kilka pytań, a pierwszym z nich jest – jakie dane posiadam? Aby znaleźć odpowiedź na to pytanie, warto wypisać sobie procesy zachodzące w firmie. Nie zawsze na pierwszy rzut oka widać, że posiadając magazyny z kamerami, posiadamy co najmniej 2 źródła danych. Po pierwsze dane magazynowe, które można wykorzystać do optymalizacji rozłożenia towaru i jego pobierania w odniesieniu do terminów transportów. Po drugie, dane w postaci obrazu z kamer, które można wykorzystać np. w celach bezpieczeństwa. 

Dane, które posiadasz, zazwyczaj poddawane są ewaluacji zgodnie z poniższą listą. Bardzo istotna w tym miejscu informacja, że dane nie muszą być idealne! Istnieją sposoby na to, aby radzić sobie z błędami, brakami w danych itp., jednakże zawsze lepiej jest dążyć do ideału, a na pewno dobrze przygotowane dane przełożą się na sprawność pracy z nimi oraz wyniki, jakie dzięki ich przetwarzaniu będzie można osiągnąć.

Przyjmuje się, że im bardziej złożony problem chcesz rozwiązać, tym więcej danych potrzebujesz. Dzisiejsze rozwiązania dają naprawdę niesamowite możliwości, w niektórych przypadkach, nawet z bardzo niewielką ilością danych, które muszą po prostu oddawać charakterystykę Twoich działań. Niemniej Istnieją pewne zasady (oparte na doświadczeniu) mówiące o absolutnym minimum. Przykładowo, korzystając ze wspomnianego wcześniej magazynu, jest to 1000 transakcji, które zostały obsłużone. Wszystko to bardzo mocno zależy jednak od konkretnego przypadku i warto już na tym etapie zasięgnąć rady ekspertów. Z punktu widzenia osób technicznych, ważne jest również, aby znać granice, po których przekroczeniu model nie będzie dawał już lepszych wyników, a wręcz zacznie spadać poziom jego stabilności. Nie znaczy to bynajmniej, że w takim momencie nie warto już gromadzić danych. Dane pozwalają nam na znajdowanie w historii pewnych zależności i wzorców na bazie, których chcemy również przewidywać przyszłe zdarzenia. I tu kolejna ważna uwaga. Możemy starać się przewidywać pewne ogólne prawdy niezależne, kiedy wystąpiły. Czy był to rok 2000, czy 2017. Lato, czy zima. Możemy także szukać czegoś, co jest zależne od wielu innych czynników, które chcemy powiązać z czasem ich występowania. Dlatego tak istotne jest nie tylko przechowywanie archiwalnych danych, ale również zbieranie tych jak najbardziej aktualnych.

Jeżeli chcemy precyzyjnie przewidywać pewne istotne fakty, bardzo ważne jest, aby zbiór danych był stosownie zbilansowany, tzn. musi być jak najbardziej równomierny rozkład ilości rekordów w każdej z klas. Choć tu ważna uwaga, mogą zaistnieć przypadki, kiedy nie będzie możliwości uzyskania takiego równomiernego rozkładu i nie powinno się tego zmieniać, ponieważ w uzasadnionych przypadkach sam ten fakt może również nieść za sobą jakiś rodzaj informacji do wykorzystania w modelu. Z reguły jednak sztuczne bilansowanie zbioru powoduje jedynie uzyskanie bezużytecznego modelu.

Miejsce drugie tego punktu nie jest przypadkowe, ponieważ jeżeli posiadamy wystarczająco dużo danych, problem niezbalansowanej próbki nie jest już tak istotny. W badaniach udowodniono, że żadna z metod bilansujących nie może równać się z efektem uzyskiwanym poprzez dodanie większej ilości danych. 

Możliwość uzupełniania przez pracownika pól tekstowych w formularzach generuje wiele potencjalnych problemów na poziomie spójności danych w bazie, a także późniejszego ich przetwarzania. Wszędzie tam, gdzie nie ma co najmniej walidacji albo w najlepszym przypadku możliwości wyboru wartości ze słowników, bardzo często spotykane są np. literówki, czy też wartości wpisywane bez staranności jak np. wiek: 200 lat. Przyczyny takich sytuacji należy szukać w brakach wypracowanych standardów, szablonów oraz słowników, z których mogliby korzystać pracownicy. Jest to aspekt bardzo istotny, żeby zweryfikować zgodność danych z rzeczywistością i jak najszybciej wychwycić błędy oraz wdrożyć wspomniane rozwiązania eliminujące ponowne występowanie takich problemów, ponieważ dane, które nie oddają realiów, będą skutkowały mało wiarygodnymi wynikami.

Puste, nieuzupełnione pola tabel powodują, że dany rekord może okazać się bezużyteczny, pomimo posiadania być może innych, bardzo wartościowych informacji. Widać więc, że jest to strata potencjału, na jaką szkoda sobie pozwolić. Takie sytuacje najczęściej wynikają z podobnych powodów, jakie zostały przedstawione w punkcie trzecim.

W Jaki sposób unikać wspomnianych strat i radzić sobie w sytuacji, kiedy jeden, lub wiele powyższych punktów nie zostaje spełnionych? Rozwiązaniem jest przede wszystkim wypracowanie odpowiednich standardów funkcjonowania firmy, ale co jest jeszcze ważniejsze, wprowadzenie ich i konsekwentne stosowanie. Poprzez ten artykuł chciałbym rozpocząć serię ukierunkowaną na dzielenie się wiedzą związaną z projektami z zakresu sztucznej inteligencji. W portfolio naszego zespołu posiadamy szereg doświadczeń zarówno w sferze komercyjnej, jak i naukowo badawczej. W każdym przypadku serdecznie zapraszamy do kontaktu, ponieważ informacje w tym artykule, są jedynie wierzchołkiem góry lodowej, jaką jest wiedza na temat rozpoczynania projektów z wykorzystaniem uczenia maszynowego i sieci neuronowych. Nawet jeśli po tej lekturze masz wrażenie, “to nie dla mnie”, niekoniecznie jest tak w rzeczywistości. 

Krzysztof Sapiejewski – Data scientist

Według raportu dotyczącego wykorzystania sztucznej inteligencji w obszarach BSFI (bankowość, usługi finansowe, ubezpieczenia) wartość tego obszaru rynku wynosiła 2.5 miliarda dolarów w 2017 roku. Prognozy pokazują, że do 2024 może ona osiągnąć nawet 25 miliardów dolarów. Firmy z obszaru szeroko pojętych usług finansowych inwestują w rozwiązania wykorzystujące sztuczną inteligencję, które pozwalają na zwiększenie ich zysków poprzez budowanie atrakcyjnej i konkurencyjnej oferty, a także optymalizację procesów. W tym artykule chciałabym opowiedzieć o tym, dlaczego sztuczna inteligencja stała się tak popularna na przestrzeni ostatnich kilkudziesięciu lat oraz pokazać, w jakich obszarach według mnie może być ona wykorzystana w branży finansowej.

AI, dlaczego teraz?

Termin “sztuczna inteligencja” został użyty po raz pierwszy w roku 1956 przez Johna McCarthy’ego, który określił nim “konstruowanie maszyn, o których działaniu dałoby się powiedzieć, że są podobne do ludzkich przejawów inteligencji”. Od momentu zdefiniowania sztucznej inteligencji do momentu, w którym zaczęliśmy ją aktywnie wykorzystywać do rozwiązywania zagadek, a z czasem problemów biznesowych, minęło nieco ponad 40 lat.

W roku 1997, wielokrotny mistrz świata w szachach Garry Kasparov został pokonany przez komputer. To był moment, w którym pojawiło się wiele dyskusji wokół sztucznej inteligencji i jej możliwych zastosowań. Nieco ponad 20 lat później, w 2019 roku, sieć neuronowa DeepCubeA ułożyła kostkę rubika w 1.2 s, wykonując to zadanie trzykrotnie szybciej od najlepszych w tej dziedzinie ludzi. To był dowód na to, jak bardzo algorytmy sztucznej inteligencji rozwinęły się przez ostatnie lata oraz przykład możliwości, jakie daje AI w zakresie optymalizacji procesów.

W dzisiejszych czasach algorytmy sztucznej inteligencji wykorzystywane są do rozwiązywania coraz większej liczby problemów z różnych dziedzin naszego życia, od rozpoznawania obrazów po autonomiczne kierowanie pojazdami. W ostatnich latach obserwujemy coraz większe zainteresowanie tym tematem przez firmy z wielu branż. Jednak skoro termin ten jest znany już od niemal 70 lat, to dlaczego dopiero teraz mamy do czynienia z tak ogromnym postępem w tym zakresie? Powodów jest kilka: 

Wykorzystanie algorytmów sztucznej inteligencji w branży finansowej

Branża finansowa charakteryzuje się dostępem do ogromnych zasobów danych. Wykorzystanie algorytmów z zakresu sztucznej inteligencji pozwala na stworzenie rozwiązań, które będą stanowiły o konkurencyjności firmy na rynku, a także pozwolą na optymalizację procesów. 

Jakich konkretnie? Oto kilka pomysłów:

Rekomendowanie odpowiednich produktów obecnym lub potencjalnym klientom w oparciu o analizę ich zachowań, jest bardzo ważnym elementem sprzedaży i dosprzedaży wielu firm, między innymi banków. Poza oczywistymi zyskami finansowymi idzie za tym również potencjalne zadowolenie klientów, którzy nie czują się zarzucani losowymi reklamami produktów, a traktowani indywidualnie. 

Doskonałym przykładem pokazującym, jak dużą rolę w zdobywaniu klientów i ich zaufania do marki pełni personalizacja, jest serwis Netflix. Algorytmy uczenia maszynowego Netflixa na podstawie dostępnych informacji nie tylko proponują nam tytuły, które potencjalnie będziemy chcieli obejrzeć, ale również dobierają zwiastuny filmów oraz seriali, które widzimy na stronie głównej zaraz po zalogowaniu.  Jeśli nasz profil pokazuje, że lubimy filmy z udziałem Henry’ego Cavila, prawdopodobnie zobaczymy propozycję serialu z Jego udziałem, a na stronie głównej pojawi nam się jego zwiastun z postacią aktora.  

Analogicznie, w branży bankowej proponowanie odpowiednich produktów może być oparte na szeregu informacji, takich jak: profil behawioralny konsumenta czy informacje o produktach, które mamy w ofercie… Ważne jest tutaj wzięcie pod uwagę nie tylko profilu konsumenta, ale także informacji o produktach, które posiadamy w ofercie. 

Kolejnym przykładem zastosowania algorytmów sztucznej inteligencji do rozwiązań usprawniających pracę banku, ale też budujących pozytywną opinię o nas wśród klientów, jest chatbot, lub w bardziej rozbudowanej wersji, personalny asystent. Zaletą systemów tego typu jest ich całodobowa dostępność oraz natychmiastowa odpowiedź na najczęściej zadawane przez klientów pytania. Daje to szereg korzyści, z których za najważniejsze można uznać: 

Dodatkowo w takim rozwiązaniu możliwe jest proponowanie klientowi najkorzystniejszych dla niego ofert w kontekście jego preferencji i nawyków, a także pomoc w zarządzaniu jego budżetem domowym np. poprzez wyszukiwanie i wysyłanie informacji o subskrypcjach, o których być może zapomniał. 

Innym przykładem wykorzystania algorytmów w kontekście sektora finansowego jest wspomaganie decyzji giełdowych, Każdy inwestor zanim podejmie decyzję o inwestycji, staje przed koniecznością analizy szeregu czynników mających wpływ na cenę akcji i przyszłe zyski.

Algorytmy sztucznej inteligencji pozwalają na skrócenie czasu monitorowania tych niekiedy setek czynników w czasie rzeczywistym, wskazują również informacje istotne z punktu widzenia potencjalnych działań, które chcemy podjąć.

Odpowiednio przygotowane rozwiązania umożliwiają rozpoznawanie wzorców występujących na rynku, a także prognozowanie cen interesujących nas akcji. 

W branży finansowej jednym z najważniejszych czynników bezpośrednio przekładającym się na posiadany kapitał jest odpowiednie oszacowanie różnego rodzaju ryzyk, takich jak na przykład: 

W tym obszarze również możliwe jest wykorzystanie algorytmów sztucznej inteligencji, które pomogą nam na podstawie danych dotyczących klienta takich jak chociażby jego historia finansowa czy wiarygodność kredytowa oszacować potencjalne ryzyko wejścia z nim we współpracę lub udzielenia mu pożyczki. Warto tutaj dodać, że w tym przypadku możliwe jest wykorzystanie również różnego typu danych alternatywnych, takich jak: regularność w dokonywaniu opłat nie uwzględnionych w historii finansowej, które budują wiarygodność potencjalnego klienta bądź współpracownika. W tym przypadku ważne jest również to, aby podejmowane przez nas decyzje były transparentne dlatego konieczne jest wykorzystanie modeli interpretowalnych. Wykorzystanie tego typu modeli przy szacowaniu chociażby wiarygodności kredytowej wpływa na budowanie zaufania klientów do firmy, ze względu na to, że podejmowane decyzje są sprawiedliwe, nie zależą od interpretacji człowieka i są w pełni weryfikowalne.

Kolejnym kluczowym obszarem, w którym warto rozważyć wykorzystanie algorytmów sztucznej inteligencji jest detekcja potencjalnych oszustw lub wyłudzeń finansowych. W tym przypadku tak jak w przypadku szacowania ryzyk każda źle podjęta decyzja generuje duże straty finansowe oraz zachwianie zaufania klientów do marki. Tutaj też bardzo ważne jest stworzenie profilu zachowań typowych dla klienta w oparciu o jego historię finansową. Na tej podstawie możliwe jest odróżnienie zleceń bankowych generowanych przez klientów od tych, które generują boty czy wykrywanie podejrzanej aktywności na koncie klienta. w oparciu o jego profil osobowy i nawyki.

Podsumowanie

Przykłady przedstawione powyżej są jedynie skrótowym opisemnie wyczerpują listy możliwych zastosowań sztucznej inteligencji w branży finansowej, jednak dają dobry punkt odniesienia. Temat ten jest bardzo obszerny i dlatego jeden artykuł nie wystarczy, żeby pokazać pełnię możliwości, jakie dają algorytmy sztucznej inteligencji w kontekście zastosowania w branży finansowej. Z tego też względu planujemy publikację kolejnego artykułu, w którym mój kolega z zespołu opowie o konkretnych przypadkach i projektach, które mieliśmy okazję realizować dla klientów z tego obszaru. Wszystkich zainteresowanych zapraszamy do śledzenia naszych wpisów na blogu Isolution oraz naszych firmowych profilach na LI i FB. 

Katarzyna Roszczewska, Data Scientist

Mało kogo ominęły przepastne artykuły na temat RODO i przeróżnych, często przerażających sankcji za jej nieprzestrzeganie. Niewielu za to zagłębia się w takie istotne szczegóły, jak znacznie anonimizacji czy retencji, które pozwalają uniknąć tych wyżej wspomnianych sankcji oraz znacząco ułatwić pracę deweloperów. Z tego też względu postanowiliśmy w przystępny sposób wyjaśnić, czym są anonimizacja i retencja danych osobowych oraz pokazać, dlaczego ich właściwe wykonanie ma takie znaczenie w procesie wytwarzania oprogramowania. Dzisiaj na warsztat bierzemy anonimizację.

Czym jest anonimizacja?

Anonimizacja to proces pozwalający na trwałe usunięcie powiązań między danymi osobowymi, a osobą, której dotyczą. W ten sposób informacje, które przed anonimizacją były danymi osobowymi, przestają nimi być.

Jak to wygląda w praktyce?

Powyższa definicja staje się mniej zagmatwana jeśli wesprzemy ją przykładem. Wyobraźmy sobie np. Supermana – komiksowego bohatera pochodzącego z Kryptonu, który chce ukryć swoją tożsamość i wtopić się w tłum. 

NazwaSuperman
ZawódBohater
PochodzenieKrypton

Podczas procesu anonimizacji Superman wchodzi do budki telefonicznej, zakłada okulary, tweedowy garnitur i staje się w tym momencie Clarkiem Kentem, reporterem z Kansas.

NazwaClark Kent
ZawódReporter
PochodzenieKansas, USA

W procesie anonimizacji dane Supermana zamieniły się na dane Clarka Kenta, co więcej nie ma żadnego powiązania między tymi dwiema osobami. To dane fikcyjne, które mogą być bezpiecznie wykorzystywane np. na środowiskach testowych.

Powyższy przykład obrazuje, na czym polega sam proces anonimizacji. Zastanówmy się teraz, dlaczego ważne jest, żeby anonimizacja była dobrej jakości.

Nieodwracalność

Fundamentem anonimizacji jest jej nieodwracalność. Na podstawie zanonimizowanych danych nigdy nie powinniśmy dociec, jak wyglądały dane oryginalne. Współpracownicy Clarka nie powinni odkryć jego prawdziwej tożsamości. 

Kiedy zbiór danych poddajemy anonimizacji, to zazwyczaj zmianie ulega jedynie fragment danych. Musimy jednak zadbać o to, aby dane niezanonimizowane nie pozwoliły na odwrócenie procesu anonimizacji dla całego zbioru. W naszym przykładzie nie musielibyśmy zmieniać ulubionego koloru Supermana. Jeżeli jednak nie anonimizujemy jego pochodzenia, to z pewnością wzbudzimy sensację.

Realność

Istotną miarą jakościową anonimizacji jest też jej realność i to, jak dobrze odwzorowuje rzeczywistość. Jeżeli Superman i wszystkie inne osoby w zbiorze danych zostaną zanonimizowane w następujący sposób:

NazwaX
ZawódY
PochodzenieZ

to nie mamy wątpliwości, że proces jest nieodwracalny, jednak jego przydatność jest wątpliwa. Pan X nie wygląda na człowieka z krwi i kości, a charakter danych oryginalnych nie został zachowany. Długości nazw nie zostały zachowane, a same dane wyglądają na niewiarygodne i wszystkie osoby nazywają się tak samo. W przypadku systemów informatycznych tester wykorzystując takie dane miałby sporo problemów, nie byłby w stanie nawet rozróżnić osób.

Powtarzalność

Kolejną cechą dobrej anonimizacji jest jej powtarzalność. Anonimizując zbiór danych chcemy mieć pewność, że za każdym razem zbiór danych zostanie zanonimizowany w taki sam sposób. Chcemy, aby Superman zawsze stawał się Clarkiem Kentem, niezależnie czy jest to pierwsza, czy dziesiąta anonimizacja. Jest to szczególnie ważne z punktu widzenia Quality Assurance. Testerzy często tworzą przypadki testowe opierając się na konkretnych danych. Gdybyśmy je zmieniali za każdym razem, z pewnością praca testera byłaby trudniejsza!

Zintegrowane systemy

Dzisiejszy świat informatyki to systemy połączone. Prawie żadna aplikacja nie jest samotną wyspą. Systemy łączą się ze sobą, wymieniają danymi, korzystają ze swoich usług. Z tego też względu podchodząc do anonimizacji, musimy myśleć o procesie nie dla jednego, ale dla wielu systemów na raz. Wyzwaniem jest, aby zanonimizowane dane były spójne w całym ekosystemie. Oznacza to, że jeżeli Daily Planet (miejsce pracy Clarka) posiada system kadrowy oraz bloga, to w obu tych aplikacjach Superman stanie się Kentem.

Wydajność

Ostatnim z mojego punktu widzenia, kluczowym parametrem mającym wpływ na jakość anonimizacji jest wydajność. Systemy informatyczne przetwarzają olbrzymie zbiory danych liczonych w gigabajtach czy terabajtach. Anonimizacja takich baz danych może być czasochłonna w związku z czym musimy zapewnić nie tylko bezpieczeństwo, ale również szybkość procesu anonimizacji. Jedną z rzeczy, którą nauczył się Superman po przybyciu na Ziemię, jest to, że czas to pieniądz. To powiedzenie jest jeszcze bardziej prawdziwe w przypadku nowoczesnego IT.

Wszystkich zainteresowanych tematem retencji danych zapraszam do przeczytania kolejnego mojego artykułu, który planuję opublikować już niedługo.

Artur Żórawski, Founder&CTO Wizards