Penciptaan sistem anti penipuan di taksi dari awal

Selamat sore. Nama saya Nikita Bashun, saya bekerja sebagai analis data di grup perusahaan Lucky. Kisah saya akan tentang bagaimana kami, dengan tim yang terdiri dari tiga orang, menciptakan dari awal sistem anti penipuan untuk layanan pemesanan perjalanan.



gambar



pengantar



Dia yang pernah tahu bagaimana menipu akan menipu berkali-kali.

Lope de Vega

Penipuan dalam kasus kami adalah situasi ketika pengemudi menipu perusahaan. Penipuan untuk mendapatkan uang.



, , 25, Delphi. . , . , . …





— MVP, .

, :



  • . ( «-» ), , . ;
  • . — , ( , ). -, 200 .
  • , — « »:

    • , (, 0% );
    • , -.


gambar



:



  • — , , , ;
  • - ( ) — , , ;
  • — , , , .








gambar



SQL- DWH, . . , , «»:



WHERE susp = 1 --   
  AND finished_orders >= 3 --        
  AND cancelled >= 3 --    ,        
  AND dist_fin_drivers <= 2 --      
  AND ok <= 2 --   2-     


, .



. « » . , ? -. , .



gambar



python. pandas, postgres, Google ( ). , , Apache Airflow.



API .

:



credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    config.crd,
    ['https://www.googleapis.com/auth/spreadsheets',
     'https://www.googleapis.com/auth/drive'])

httpAuth = credentials.authorize(httplib2.Http())
service = googleapiclient.discovery.build('sheets', 'v4', http=httpAuth)
sheet = service.spreadsheets()


:



base_range = f'{city_name}!A{ss_row + 1}:Z{ss_row + reserved_rows}'
sheet.values().append(spreadsheetId=spreadsheetid,
                                 range=base_range,
                                 body={"values": df_pos.values.tolist()},
                                 valueInputOption='RAW').execute()


:



range_from_ss = f'{city_name}!A{ss_row}:S{ss_row + reserved_rows}'

data_from_ss = service.spreadsheets().values().get(
            spreadsheetId=spreadsheetid,
            range=range_from_ss).execute().get('values', [])

data_from_ss = pd.DataFrame(data_from_ss)
data_from_ss_cols = ['id', '', '']
data_from_ss = data_from_ss.loc[1:, data_from_ss_cols]


PG:



vls_ss = ','.join([f"""({', '.join([f(d[c]) for c in data_from_ss_cols])}
                    )""" for d in data_from_ss.to_dict('rows')])

sql_update = f"""
    WITH updated as (
        UPDATE fraud_billing
        SET resolution = tb.resolution,
            comment=tb.comment,
            dt = NOW()
        FROM (VALUES {vls_ss}) AS tb(fraud_billing_id, resolution, comment)
        WHERE fraud_billing.fraud_billing_id = CAST(tb.fraud_billing_id AS INTEGER)
            AND ((fraud_billing.resolution IS NULL AND tb.resolution IS NOT NULL)
                OR (fraud_billing.comment IS NULL AND tb.comment IS NOT NULL)
                OR (fraud_billing.comment IS NOT NULL AND tb.comment IS NOT NULL
                   AND fraud_billing.comment <> tb.comment)
                OR (fraud_billing.resolution IS NOT NULL AND tb.resolution IS NOT NULL
                    AND fraud_billing.resolution <> tb.resolution)
               )
        RETURNING {alias_cols_text_with_id}
        )
    INSERT INTO fraud_billing_history ({cols_text_with_id})
    SELECT {cols_text_with_id}
    FROM updated;
"""

crs_postgres.execute(sql_update)
con_postgres.commit()


postgres :



  • ;
  • .


:



gambar



( , ).



, :



gambar



— .



: , , .



.



, . , , — . «» .



gambar



FP- , .



— , , . .



« ». , , :



  • ;
  • ;
  • ;
  • — .


.



, . , , , , . - :



gambar



, , — .



Google Spreadsheets. . , :



  • , «» ;
  • API — ;
  • ;
  • , .




. , — :



  • . - , - , - . , . ;
  • . , , :

    • - , ;
    • - ;
    • - , ;
    • - .


, , . , «».



— , . — , . !




, ?



  • . . , «» , . ;
  • . , . , .


( ) 35%. — 25%. , — — , . : , , , . .



gambar



:



  • 15 ;
  • 6800 ;
  • 500 .


Tetapi keberhasilan terpenting adalah pengurangan bertahap kasus kecurigaan di banyak kota. Lagipula, idealnya, kita tidak ingin menangkap lebih banyak , kita tidak ingin menangkap apa - apa .



Kesimpulan



Saya mencoba menjelaskan fungsi dan prinsip utama sistem anti-penipuan, serta kesulitan yang kami temui. Rencananya termasuk: menggunakan ML untuk mengoptimalkan pencarian, membuat sistem pemantauan sanksi (sekarang dalam tahap awal), meningkatkan antarmuka untuk manajer, membuat pelaporan dinamis, mengembangkan pola baru, dan banyak lagi.



Bagaimanapun, kita baru berada di awal perjalanan.




All Articles