রিটেইল ব্যাঙ্কিং ডেটাসেট কোডল্যাবের জন্য জালিয়াতির পূর্বাভাস এবং ভূ-স্থানিক বিশ্লেষণ

1. ভূমিকা

এই ল্যাবে, আপনি BigQuery-এ SQL ব্যবহার করে সাম্প্রতিক লেনদেন জালিয়াতি কিনা তা অনুমান করতে একটি লিনিয়ার রিগ্রেশন মডেল তৈরি করেন। আপনি একটি প্রশিক্ষণ ডেটাসেট তৈরি করেন যাতে প্রতিটি কার্ডের লেনদেন এবং কিছু বৈশিষ্ট্য রয়েছে যা আমরা ভালভাবে জালিয়াতি নির্দেশ করে, যেমন গ্রাহকের বাড়ি থেকে দূরত্ব, দিনের সময় এবং লেনদেনের পরিমাণ।

তারপরে আপনি আমাদের প্রশিক্ষণ ডেটার উপর ভিত্তি করে একটি লেনদেন জালিয়াতি কিনা তা অনুমান করতে একটি লজিস্টিক রিগ্রেশন মডেল তৈরি করতে BQML ব্যবহার করুন৷ BQ ML-এর চমৎকার বৈশিষ্ট্যগুলির মধ্যে একটি হল এটি ওভারফিটিং এর যত্ন নেয়, যাতে আমাদের প্রশিক্ষণের ডেটা নতুন ডেটাতে মডেলের কর্মক্ষমতাকে প্রভাবিত না করে। অবশেষে আপনি বিভিন্ন বৈশিষ্ট্য সহ তিনটি নমুনা লেনদেন তৈরি করুন এবং ভবিষ্যদ্বাণী করুন যে তারা জালিয়াতি করছে বা মডেলটি ব্যবহার করছে না।

যা শিখবেন

এই ল্যাবে, আপনি কীভাবে নিম্নলিখিত কাজগুলি সম্পাদন করবেন তা শিখবেন:

  • একটি Google ক্লাউড স্টোরেজ বাকেট থেকে ডেটাসেট লোড করুন
  • প্রশিক্ষণ ডেটা তৈরি করুন
  • লজিস্টিক রিগ্রেশন মডেল তৈরি করুন এবং প্রশিক্ষণ দিন
  • নমুনা লেনদেন জালিয়াতি কিনা তা ভবিষ্যদ্বাণী করতে মডেল ব্যবহার করুন
  • ভূ-স্থানিক বিশ্লেষণ ব্যবহার করে জিপ কোড দ্বারা জালিয়াতি লেনদেন সনাক্ত করুন

2. একটি GCS বালতি থেকে ডেটাসেট লোড করুন

এই টাস্কে, আপনি bq_demo নামে একটি ডেটাসেট তৈরি করুন এবং এটি একটি GCS বালতি থেকে খুচরা ব্যাঙ্কিং ডেটা সহ লোড করুন৷ এটি আপনার টেবিলে ইতিমধ্যেই বিদ্যমান যেকোন ডেটা মুছে ফেলবে।

ক্লাউড শেল খুলুন

  1. ক্লাউড কনসোলে, উপরের ডানদিকে টুলবারে, অ্যাক্টিভেট ক্লাউড শেল বোতামে ক্লিক করুন।

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 ক্লাউড স্টোরেজ বাকেট থেকে সফলভাবে একটি ডেটাসেট লোড করেছেন৷

3. প্রশিক্ষণ ডেটা তৈরি করুন

কার্ডের ধরন প্রতি প্রতারণামূলক লেনদেনের জন্য প্রশ্ন

আমরা প্রশিক্ষণের ডেটা তৈরি করার আগে, আসুন বিশ্লেষণ করি কীভাবে কার্ডের প্রকারের মধ্যে প্রতারণামূলক লেনদেনগুলি বিতরণ করা হয়। আমাদের খুচরা ব্যাঙ্কিং ডাটাবেসে একটি পতাকা রয়েছে যা নির্দেশ করে যখন একজন গ্রাহক তাদের অ্যাকাউন্টে একটি প্রতারণামূলক লেনদেন রিপোর্ট করেছেন। এই ক্যোয়ারী কার্ডের ধরন অনুসারে প্রতারণামূলক লেনদেনের সংখ্যা দেখায়।

[ প্রতিযোগীতামূলক কথা বলার পয়েন্ট: নির্দিষ্ট প্রতিযোগীদের থেকে ভিন্ন, BigQuery আপনাকে আপনার ডেটা গুদামের ডেটা স্টোরেজ বাকেটে রপ্তানি করতে, মেশিন লার্নিং অ্যালগরিদম চালাতে, তারপর ফলাফলগুলিকে ডাটাবেসে কপি করতে চায় না। এই সমস্ত কিছু জায়গায় করা যেতে পারে, যা ডেটা সুরক্ষা সংরক্ষণ করে এবং "ডেটা স্প্রল" এর দিকে পরিচালিত করে না। ]

  1. BigQuery কনসোল খুলুন:

Google ক্লাউড কনসোলে, নেভিগেশন মেনু > BigQuery নির্বাচন করুন।

dfdbd753a900e349.png

  1. ক্লাউড কনসোলের মেসেজ বক্সে 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-এর মাধ্যমে, বিশ্লেষকরা SQL-এর মাধ্যমে ডাটা গুদাম ডাটাতে সরাসরি বিশ্বমানের ML মডেল চালাতে পারেন।

প্রশিক্ষণ ডেটা তৈরি করুন

একটি প্রশিক্ষণ ডেটা সেট তৈরি করুন যাতে প্রতিটি কার্ড লেনদেন এবং কিছু বৈশিষ্ট্য রয়েছে যা আমরা সবচেয়ে ভালভাবে জালিয়াতি নির্দেশ করে, যেমন গ্রাহকের বাড়ি থেকে দূরত্ব, দিনের সময় এবং লেনদেনের পরিমাণ।

ক্যোয়ারী এডিটরে ক্যোয়ারী চালান:

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. জালিয়াতির পূর্বাভাস দিতে মডেল ব্যবহার করুন

একটি লেনদেন সম্ভাব্য জালিয়াতি কিনা তা ভবিষ্যদ্বাণী করতে এখন আমাদের মডেল ব্যবহার করা যাক। আমরা বিভিন্ন বৈশিষ্ট্য সহ 3টি নমুনা লেনদেন তৈরি করব।

ক্যোয়ারী এডিটরে নিম্নলিখিত ক্যোয়ারী চালান:

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%। এটি সম্ভবত এমন কিছু যা আমরা তদন্ত করতে চাই।