खुदरा बैंकिंग के डेटासेट के लिए कोडलैब (कोड बनाना सीखना) के लिए, धोखाधड़ी का अनुमान लगाना और भौगोलिक डेटा का विश्लेषण

1. परिचय

इस लैब में, एक लीनियर रिग्रेशन मॉडल बनाया जाता है, ताकि BigQuery में एसक्यूएल का इस्तेमाल करके यह अनुमान लगाया जा सके कि हाल ही में किए गए लेन-देन धोखाधड़ी वाले हैं या नहीं. आपको एक ट्रेनिंग डेटासेट बनाना होगा, जिसमें हर कार्ड ट्रांज़ैक्शन और कुछ ऐसे एट्रिब्यूट शामिल हों जो हमने धोखाधड़ी की जानकारी देने के लिए सबसे अच्छे तरीके से तय किए हैं. जैसे, ग्राहक के घर से दूरी, दिन का समय, और लेन-देन की रकम.

इसके बाद, BQML का इस्तेमाल करके लॉजिस्टिक रिग्रेशन मॉडल बनाया जाता है. इस मॉडल का इस्तेमाल करके, हमारे ट्रेनिंग डेटा के आधार पर यह अनुमान लगाया जाता है कि कोई लेन-देन धोखाधड़ी से हुआ है या नहीं. बीक्यू एमएल की सबसे अच्छी बात यह है कि इसमें ज़रूरत से ज़्यादा फ़िटिंग का ध्यान रखा जाता है. ऐसा इसलिए, ताकि हमारे ट्रेनिंग डेटा से नए डेटा के मॉडल की परफ़ॉर्मेंस पर कोई असर न पड़े. आखिर में, अलग-अलग विशेषताओं वाले तीन सैंपल लेन-देन तैयार किए जाते हैं. साथ ही, यह अनुमान लगाया जाता है कि वे धोखाधड़ी कर रहे हैं या मॉडल का इस्तेमाल नहीं कर रहे हैं.

आपको क्या सीखने को मिलेगा

इस लैब में, आपको इन कामों को करने का तरीका पता चलता है:

  • Google Cloud Storage बकेट से डेटासेट लोड करना
  • ट्रेनिंग का डेटा बनाएं
  • लॉजिस्टिक रिग्रेशन मॉडल बनाएं और उसे ट्रेनिंग दें
  • मॉडल का इस्तेमाल करके अनुमान लगाएं कि सैंपल लेन-देन धोखाधड़ी वाले हैं या नहीं
  • जियोस्पेशल विश्लेषण की सुविधा का इस्तेमाल करके, पिन कोड की मदद से धोखाधड़ी वाले लेन-देन की पहचान करना

2. GCS (जीसीएस) बकेट से डेटासेट लोड करें

इस टास्क में, आपको bq_demo नाम का एक डेटासेट बनाना है और उसे GCS (जीसीएस) बकेट से रीटेल बैंकिंग डेटा के साथ लोड करना है. ऐसा करने से, आपकी टेबल में पहले से मौजूद डेटा मिट जाएगा.

Cloud Shell खोलें

  1. Cloud Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार में, Cloud Shell के चालू करें बटन पर क्लिक करें.

3c0c949fe3626208.png

  1. क्लाउड शेल लोड हो जाने पर, यह टाइप करें:
bq rm -r -f -d bq_demo
bq rm -r -f -d bq_demo_shared
bq mk --dataset bq_demo
bq load --replace --autodetect --source_format=CSV bq_demo.account gs://retail-banking-looker/account
bq load --replace --autodetect --source_format=CSV bq_demo.base_card gs://retail-banking-looker/base_card
bq load --replace --autodetect --source_format=CSV bq_demo.card gs://retail-banking-looker/card
bq load --replace --autodetect --source_format=CSV bq_demo.card_payment_amounts gs://retail-banking-looker/card_payment_amounts
bq load --replace --autodetect --source_format=CSV bq_demo.card_transactions gs://retail-banking-looker/card_transactions
bq load --replace --autodetect --source_format=CSV bq_demo.card_type_facts gs://retail-banking-looker/card_type_facts
bq load --replace --autodetect --source_format=CSV bq_demo.client gs://retail-banking-looker/client
bq load --replace --autodetect --source_format=CSV bq_demo.disp gs://retail-banking-looker/disp
bq load --replace --autodetect --source_format=CSV bq_demo.loan gs://retail-banking-looker/loan
bq load --replace --autodetect --source_format=CSV bq_demo.order gs://retail-banking-looker/order
bq load --replace --autodetect --source_format=CSV bq_demo.trans gs://retail-banking-looker/trans
  1. यह प्रोसेस पूरी होने के बाद, क्लाउड शेल टर्मिनल को बंद करने के लिए X पर क्लिक करें. आपने Google Cloud Storage बकेट से डेटासेट लोड कर दिया है.

3. ट्रेनिंग का डेटा बनाएं

हर कार्ड टाइप के हिसाब से धोखाधड़ी वाले लेन-देन की जानकारी

इससे पहले कि हम ट्रेनिंग का डेटा बनाएं, आइए इस बात का विश्लेषण करते हैं कि धोखाधड़ी वाले लेन-देन को अलग-अलग कार्ड में किस तरह बांटा गया है. हमारे खुदरा बैंकिंग डेटाबेस में एक फ़्लैग होता है. इससे पता चलता है कि किसी ग्राहक ने अपने खाते में धोखाधड़ी वाले लेन-देन की शिकायत कब की है. यह क्वेरी कार्ड के टाइप के हिसाब से, धोखाधड़ी वाले लेन-देन की संख्या दिखाती है.

[प्रतिस्पर्धी की चर्चा: कुछ प्रतिस्पर्धियों के उलट, BigQuery के लिए आपको अपने डेटा वेयरहाउस के डेटा को स्टोरेज बकेट में एक्सपोर्ट करने, मशीन लर्निंग एल्गोरिदम चलाने, और नतीजों को वापस डेटाबेस में कॉपी करने की ज़रूरत नहीं पड़ती. यह सब कुछ आसानी से किया जा सकता है, जिससे डेटा की सुरक्षा बनी रहती है और "डेटा का गलत इस्तेमाल" नहीं होता.]

  1. BigQuery कंसोल खोलें:

Google Cloud Console में, नेविगेशन मेन्यू > BigQuery.

dfdbd753a900e349.png

  1. Cloud Console मैसेज बॉक्स में, 'BigQuery में आपका स्वागत है' मैसेज बॉक्स खुलेगा. इस मैसेज बॉक्स में क्विकस्टार्ट गाइड और प्रॉडक्ट की जानकारी का लिंक होता है.

'हो गया' पर क्लिक करें.

इसके बाद, BigQuery कंसोल खुल जाएगा.

2982953ee582e477.png

  1. क्वेरी एडिटर में क्वेरी चलाएं:
SELECT c.type, count(trans_id) as fraud_transactions
FROM bq_demo.card_transactions AS t 
JOIN bq_demo.card c ON t.cc_number = c.card_number
WHERE t.is_fraud=1
GROUP BY type

कैसा हो अगर हम इस डेटा का इस्तेमाल, ग्राहक के नोटिस करने से पहले ही धोखाधड़ी वाले लेन-देन का अनुमान लगाने के लिए कर सकें? एमएल सिर्फ़ विशेषज्ञों के लिए नहीं है. BigQuery की मदद से, ऐनलिस्ट एसक्यूएल के ज़रिए सीधे डेटा वेयरहाउस के डेटा पर, बेहतरीन एमएल मॉडल चला सकते हैं.

ट्रेनिंग डेटा बनाना

एक ट्रेनिंग डेटा सेट बनाएं, जिसमें हर कार्ड ट्रांज़ैक्शन और कुछ ऐसे एट्रिब्यूट शामिल हों जो हमने धोखाधड़ी की जानकारी देने के लिए तय किए हैं. जैसे, ग्राहक के घर से दूरी, दिन का समय, और ट्रांज़ैक्शन की रकम.

क्वेरी एडिटर में क्वेरी चलाएं:

CREATE OR REPLACE TABLE bq_demo.training_data as (
  SELECT
    card_transactions.trans_id  AS trans_id,
    card_transactions.is_fraud  AS is_fraud,
    --amount for transaction: higher amounts are more likely to be fraud
    cast(card_transactions.amount as FLOAT64)  AS card_transactions_amount,
    --distance from the customers home: further distances are more likely to be fraud
    ST_DISTANCE((ST_GEOGPOINT((cast(card_transactions.merchant_lon as FLOAT64)),
            (cast(card_transactions.merchant_lat as FLOAT64)))), (ST_GeogPoint((cast(SPLIT(client.address,'|')[OFFSET(4)] as float64)),
            (cast(SPLIT(client.address,'|')[OFFSET(3)] as float64)))))  AS card_transactions_transaction_distance,
    --hour that transaction occured: fraud occurs in middle of night (usually between midnight and 4 am)
    EXTRACT(HOUR FROM TIMESTAMP(CONCAT(card_transactions.trans_date,' ',card_transactions.trans_time)) ) AS card_transactions_transaction_hour_of_day
  FROM bq_demo.card_transactions  AS card_transactions
  LEFT JOIN bq_demo.card  AS card ON card.card_number = card_transactions.cc_number
  LEFT JOIN bq_demo.disp  AS disp ON card.disp_id = disp.disp_id
  LEFT JOIN bq_demo.client  AS client ON disp.client_id = client.client_id );

"नतीजे" में जाकर "टेबल पर जाएँ" पर क्लिक करें और आपको यह नतीजा दिखेगा:

c03442924d2dc7f3.png

4. मॉडल बनाना और उसे ट्रेनिंग देना

BQML का इस्तेमाल करके लॉजिस्टिक रिग्रेशन मॉडल बनाएं. इससे यह अनुमान लगाया जा सकता है कि कोई लेन-देन, धोखाधड़ी वाला है या नहीं. यह अनुमान पिछले चरण में तैयार किए गए हमारे ट्रेनिंग डेटा के आधार पर लगाया जाता है. BQML की एक अच्छी बात यह है कि इसमें ज़रूरत से ज़्यादा फ़िटिंग का ध्यान रखा जाता है. ऐसा इसलिए, ताकि हमारे ट्रेनिंग डेटा से नए डेटा के मॉडल की परफ़ॉर्मेंस पर कोई असर न पड़े.

क्वेरी एडिटर में क्वेरी चलाएं:

CREATE OR REPLACE MODEL bq_demo.fraud_prediction
    OPTIONS(model_type='logistic_reg', labels=['is_fraud']) AS
    SELECT * EXCEPT(trans_id)
    FROM bq_demo.training_data
    WHERE (is_fraud = 1) OR 
            (is_fraud = 0 AND rand() <= 
                (SELECT SUM(is_fraud)/COUNT(*) FROM bq_demo.training_data));

मॉडल की जानकारी देखना

"नतीजे" में जाकर, "मॉडल पर जाएं" पर क्लिक करें.

9417986e0fa45427.png

आपको स्कीमा, ट्रेनिंग, और इवैलुएशन टैब दिखेंगे.

"ट्रेनिंग टैब" में, आपको यह जानकारी दिखेगी:

cb6b11a01816ba74.png

"आकलन टैब" में जाकर, आपको यह जानकारी दिखेगी:

ff47d42700a79544.png

"स्कीमा टैब" में, आपको यह दिखेगा:

edfd13025ed64705.png

5. धोखाधड़ी का अनुमान लगाने के लिए मॉडल का इस्तेमाल करना

आइए, अब हमारे मॉडल का इस्तेमाल यह अनुमान लगाने के लिए करते हैं कि कोई लेन-देन धोखाधड़ी हो सकता है या नहीं. हम अलग-अलग विशेषताओं वाले तीन सैंपल लेन-देन बनाएंगे.

क्वेरी एडिटर में नीचे दी गई क्वेरी चलाएं:

SELECT * FROM ML.PREDICT(MODEL bq_demo.fraud_prediction, (
  SELECT '001' as trans_id, 500.00 as card_transactions_amount, 600 as card_transactions_transaction_distance, 2 as card_transactions_transaction_hour_of_day
    UNION ALL
  SELECT '002' as trans_id, 5.25 as card_transactions_amount, 2 as card_transactions_transaction_distance, 13 as card_transactions_transaction_hour_of_day
    UNION ALL
  SELECT '003' as trans_id, 175.50 as card_transactions_amount, 45 as card_transactions_transaction_distance, 10 as card_transactions_transaction_hour_of_day
  ), STRUCT(0.55 AS threshold)
);

आपको इस तरह के नतीजे दिखेंगे:

c3c25d3652e45c9c.png

जैसा कि आपको दिख रहा है, हमारे मॉडल के आधार पर पहला लेन-देन बिलकुल धोखाधड़ी वाला होता है. वहीं, दूसरा और तीसरा लेन-देन, धोखाधड़ी वाला न होने का अनुमान होता है. हमने थ्रेशोल्ड को 55% पर सेट कर दिया है. इसे डिफ़ॉल्ट रूप से 50% पर सेट किया गया था. हम अपने मॉडल को अतिरिक्त डेटा के साथ ट्रेनिंग दे सकते हैं या ज़्यादा सटीक जानकारी देने के लिए उसमें अतिरिक्त एट्रिब्यूट जोड़ सकते हैं.

6. जियोस्पेशल विश्लेषण की सुविधा का इस्तेमाल करके, पिन कोड की मदद से धोखाधड़ी वाले लेन-देन की पहचान करना

BigQuery में जियोस्पेशियल डेटा का बेहतर तरीके से इस्तेमाल किया जा सकता है. यहां एक उदाहरण दिया गया है, जिसमें GIS फ़ंक्शन ST_WITHIN का इस्तेमाल करके, पिन कोड की सीमाओं के सार्वजनिक डेटा सेट का इस्तेमाल करके कारोबारी के लेन-देन के अक्षांश और देशांतर दिए गए पिन कोड का पता लगाया जाता है.

क्वेरी एडिटर में यह कोड चलाएं:

WITH trans_by_zip as (
  SELECT
    card_transactions.trans_id,
    zip_code AS merchant_zip,
    city as merchant_city,
    county as merchant_county,
    state_name as merchant_state
  FROM
    bq_demo.card_transactions AS card_transactions,
    bigquery-public-data.geo_us_boundaries.zip_codes AS zip_codes
  WHERE ST_Within(ST_GEOGPOINT((cast(card_transactions.merchant_lon as FLOAT64)),(cast(card_transactions.merchant_lat as FLOAT64))),zip_codes.zip_code_geom)
)
SELECT merchant_zip, 1.0 * (SUM(is_fraud)) / nullif((COUNT(*)),0) AS percent_transactions_fraud
FROM bq_demo.card_transactions t, trans_by_zip
WHERE t.trans_id = trans_by_zip.trans_id
GROUP BY merchant_zip
ORDER BY percent_transactions_fraud DESC;

आपको ये नतीजे दिखेंगे:

6f0dfb6d93c0be11.png

जैसा कि आपको दिख रहा है, ज़्यादातर पिन कोड में धोखाधड़ी की दर तुलनात्मक रूप से कम (2% से कम) है, लेकिन 69345 में धोखाधड़ी की दर हैरान करने वाली 11% है. शायद हम इसी चीज़ की जांच करना चाहते हैं.