Under de senaste sex mÄnaderna har jag arbetat med att skapa ett system för att bekÀmpa bedrÀgerier (fraudulent activity, fraud, etc.) utan nÄgon initial infrastruktur för detta. Dagens idéer som vi har hittat och implementerat i vÄrt system hjÀlper oss att upptÀcka mÄnga bedrÀgerier och analysera dem. I den hÀr artikeln vill jag berÀtta om de principer som vi följde och vad vi gjorde för att uppnÄ det nuvarande tillstÄndet i vÄrt system, utan att gÄ in pÄ den tekniska delen.
Principerna för vÄrt system
NĂ€r du hör sĂ„dana termer som "automatic" och "fraud" börjar du troligtvis tĂ€nka pĂ„ maskininlĂ€rning, Apache Spark, Hadoop, Python, Airflow och andra teknologier i Apache Foundations ekosystem och Data Science-omrĂ„det. Jag tror att det finns en aspekt av att anvĂ€nda dessa verktyg som oftast inte nĂ€mns: de krĂ€ver att vissa förutsĂ€ttningar finns i ditt företags system innan du börjar anvĂ€nda dem. Kort sagt, du behöver en företagsdataplattform som inkluderar ett datalager och en databas. Men vad gör du om du inte har en sĂ„dan plattform och Ă€ndĂ„ behöver utveckla denna praktik? De följande principerna som jag berĂ€ttar om nedan hjĂ€lpte oss att nĂ„ en punkt dĂ€r vi kan fokusera pĂ„ att förbĂ€ttra vĂ„ra idĂ©er istĂ€llet för att leta efter lösningar. ĂndĂ„ Ă€r detta inte projektets "platĂ„". Det finns fortfarande mycket kvar att göra ur bĂ„de teknisk och produktiv synvinkel.
Princip 1: vÀrde för verksamheten först
I centrum för alla vÄra insatser satte vi "vÀrde för verksamheten". Generellt sett tillhör alla system för automatisk analys gruppen av komplexa system med hög automatiseringsgrad och teknisk svÄrighet. Att skapa en komplett lösning kommer att ta vÀldigt lÄng tid om du bygger den frÄn grunden. Vi valde att prioritera affÀrsvÀrdet före teknisk fullstÀndighet. I praktiken innebÀr detta att vi inte ser avancerad teknik som en dogm. Vi vÀljer den teknologi som fungerar bÀst för oss just nu. Med tiden kan det visa sig att vi behöver implementera om vissa moduler. Detta Àr kompromissen vi har accepterat.
Princip 2: FörstÀrkt intelligens (augmented intelligence)
Jag slÄr vad om att de flesta mÀnniskor som inte Àr djupt involverade i utvecklingen av maskininlÀrningslösningar kan tro att mÄlet Àr att ersÀtta mÀnniskor. I sjÀlva verket Àr maskininlÀrningslösningar lÄngt ifrÄn perfekta och ersÀttning Àr endast möjlig inom vissa omrÄden. Vi övergav denna idé frÄn början av flera skÀl: obalanserade data om bedrÀgerier och oförmÄgan att tillhandahÄlla en uttömmande lista över funktioner för maskininlÀrningsmodeller. I stÀllet valde vi en lösning med förstÀrkt intelligens. Detta Àr ett alternativt koncept av artificiell intelligens som fokuserar pÄ AI:s stödjande roll, vilket understryker att kognitiva teknologier Àr avsedda att förbÀttra mÀnsklig intelligens snarare Àn att ersÀtta den. [1]
Med detta i Ätanke skulle utvecklingen av en komplett maskininlÀrningslösning frÄn grunden krÀva enorma anstrÀngningar, vilket skulle försena skapandet av vÀrde för vÄrt företag. Vi beslutade att bygga ett system med en iterativt vÀxande aspekt av maskininlÀrning under vÀgledning av vÄra Àmnesexperter. Den tuffa delen av att utveckla ett sÄdant system Àr att det mÄste ge vÄra analytiker fall inte bara utifrÄn om det Àr bedrÀgligt beteende eller ej. Generellt sett Àr varje avvikelse frÄn kundernas beteende ett misstÀnkt fall som specialisterna behöver undersöka och pÄ nÄgot sÀtt reagera pÄ. Endast en del av dessa registrerade fall kan verkligen klassificeras som bedrÀgeri.
Princip 3: plattform för omfattande analysdata
Den mest utmanande delen av vÄrt system Àr den övergripande arbetsflödeskontrollen. Analytiker och utvecklare mÄste enkelt kunna hÀmta dataset frÄn tidigare perioder med alla de mÀtvÀrden som anvÀndes för analys. Dessutom mÄste dataplattformen tillhandahÄlla ett enkelt sÀtt att komplettera befintliga uppsÀttningar av mÀtningar med nya. Processerna vi skapar, vilket inte bara gÀller programvaruprocesser, mÄste möjliggöra en enkel omrÀkning av tidigare perioder, lÀgga till nya mÀtvÀrden och justera dataprognoser. Vi skulle kunna uppnÄ detta genom att lagra all data som vÄr produktionssystem genererar. I sÄ fall skulle datan gradvis bli ett hinder. Vi skulle behöva lagra en vÀxande mÀngd data som vi inte anvÀnder, och skydda dem. I detta scenario skulle datan med tiden bli alltmer irrelevanta, men ÀndÄ krÀva vÄra anstrÀngningar för att hanteras. För oss var datalagring meningslös, och vi bestÀmde oss för att anvÀnda en annan strategi. Vi valde att organisera datalager i realtid kring de mÄlobjekt vi vill klassificera och endast lagra den data som behövs för att kontrollera de senaste och mest aktuella perioderna. Komplexiteten i dessa anstrÀngningar ligger i att vÄrt system Àr heterogent med flera datalager och programmoduler som krÀver noggrant planering för att fungera konsekvent.
Konstruktiva koncept för vÄrt system
Vi har fyra grundlÀggande komponenter i vÄrt system: insamlingssystemet (ingestion system), berÀkningssystemet (computational), analys (BI analysis) och spÄrningssystemet (tracking system). De tjÀnar specifika isolerade syften, och vi hÄller dem isolerade genom att följa specifika utvecklingsmetoder.

Design baserad pÄ kontrakt
Först och frÀmst kom vi överens om att komponenterna endast ska förlita sig pÄ specifika datainsamlingsstrukturer (kontrakt) som överförs mellan dem. Detta möjliggör enkel integration mellan dem och tvingar inte en specifik sammansÀttning (eller ordning) av komponenterna. Till exempel i vissa fall möjliggör detta att vi direkt kan integrera mottagningssystemet med varningsspÄrningssystemet. I sÄ fall kommer det att göras i enlighet med det överenskomna kontraktet för varningar. Detta betyder att bÄda komponenterna kommer att integreras med hjÀlp av ett kontrakt som kan anvÀndas av vilken annan komponent som helst. Vi kommer inte att lÀgga till ett extra kontrakt för tillÀgg av varningar i spÄrningssystemet frÄn inmatningssystemet. Denna metod krÀver att ett förutbestÀmt minimum av kontrakt anvÀnds och förenklar systemet och kommunikationen. I grund och botten anvÀnder vi ett angreppssÀtt som kallas 'Contract First Design' och tillÀmpar det pÄ kontrakt för datastreaming. [2]
Streaming överallt
Att spara och hantera tillstÄnd i systemet kommer oundvikligen att leda till komplexitet i dess implementering. I allmÀnhet bör tillstÄndet vara tillgÀngligt frÄn alla komponenter, det bör vara konsekvent och ge det mest aktuella vÀrdet till alla komponenter, och det bör vara pÄlitligt med korrekta vÀrden. Dessutom ökar förekomsten av anrop till permanent lagring för att hÀmta det senaste tillstÄndet antalet in- och utmatningsoperationer och komplexiteten i algoritmerna som anvÀnds i vÄra realtidspipelines. DÀrför beslutade vi att ta bort lagring av tillstÄnd, sÄ lÄngt det Àr möjligt, frÄn vÄrt system. Denna metod krÀver att alla nödvÀndiga data inkluderas i den överförda datablocket (meddelandet). Om vi till exempel behöver berÀkna det totala antalet vissa observationer (antalet operationer eller fall med vissa egenskaper) berÀknar vi det i minnet och genererar en ström av sÄdana vÀrden. Beroende moduler kommer att anvÀnda partitionering och batchning för att dela upp strömmen i entiteter och arbeta med de senaste vÀrdena. Denna metod eliminerade behovet av att ha en permanent diskbaserad lagring för sÄdana data. VÄrt system anvÀnder Kafka som meddelandebroker, och det kan anvÀndas som en databas med KSQL. [3] Men dess anvÀndning skulle starkt koppla vÄr lösning till Kafka, och vi beslutade att inte anvÀnda det. Den metod vi har valt möjliggör att ersÀtta Kafka med en annan meddelandebroker utan allvarliga interna förÀndringar av systemet.
Detta koncept innebÀr inte att vi inte anvÀnder diskbaserade lagringar och databaser. För att verifiera och analysera systemets prestanda behöver vi lagra en betydande mÀngd data pÄ disken som representerar olika mÄtt och tillstÄnd. En viktig punkt hÀr Àr att realtidsalgoritmerna inte Àr beroende av sÄdana data. I de flesta fall anvÀnder vi de lagrade data för sjÀlvstÀndig analys, felsökning och spÄrning av specifika fall och resultat som systemet ger.
Problem med vÄrt system
Det finns vissa problem som vi har löst till en viss nivÄ, men de krÀver mer genomtÀnkta lösningar. Just nu skulle jag bara vilja nÀmna dem hÀr, eftersom varje punkt förtjÀnar en egen artikel.
- Vi mÄste fortfarande definiera processer och policys som bidrar till insamling av meningsfull och relevant data för vÄr automatiska analys, upptÀckts- och forskningsdata.
- Integreringen av resultat frÄn mÀnsklig analys i processen för automatisk systemkonfiguration för att uppdatera den med de senaste uppgifterna. Detta handlar inte bara om att uppdatera vÄr modell utan ocksÄ om att uppdatera processerna och förbÀttra förstÄelsen av vÄra data.
- Att hitta balansen mellan en deterministisk IF-ELSE-ansats och ML. NÄgon sa: "ML Àr ett verktyg för de förtvivlade". Det betyder att du kommer att vilja anvÀnda ML nÀr du inte lÀngre förstÄr hur du ska optimera och förbÀttra dina algoritmer. à andra sidan tillÄter inte den deterministiska ansatsen upptÀckten av anomalier som inte förutsÄgs.
- Vi behöver ett enkelt sÀtt att testa vÄra hypoteser eller korrelationer mellan mÀtvÀrdena i datan.
- Systemet mÄste ha flera nivÄer av verkligt positiva (true positive) resultat. BedrÀgerifall Àr bara en del av alla fall som kan betraktas som positiva för systemet. Till exempel vill analytiker fÄ alla misstÀnkta fall för granskning, och bara en liten del av dem Àr bedrÀgeri. Systemet bör effektivt tillhandahÄlla alla fall för analytiker oavsett om det handlar om verkligt bedrÀgeri eller bara misstÀnkt beteende.
- Dataplattformen mÄste tillÄta Ätkomst till datamÀngder frÄn tidigare perioder med berÀkningar som skapats och berÀknats i realtid.
- Enkelt och automatiskt implementera nÄgon av systemets komponenter i minst tre olika miljöer: produktionsmiljö, experimentell (beta) och för utvecklare.
- Och sist men inte minst, vi behöver skapa en omfattande plattform för prestandatestning dÀr vi kan analysera vÄra modeller. [4]
LĂ€nkar
KĂ€lla: habr.com
