Lớp học lập trình về tập dữ liệu Ngân hàng bán lẻ và dự đoán hành vi gian lận và Phân tích không gian địa lý

1. Giới thiệu

Trong phòng thí nghiệm này, bạn sẽ tạo một mô hình hồi quy tuyến tính để dự đoán xem các giao dịch gần đây có phải là giao dịch gian lận hay không bằng cách sử dụng SQL trong BigQuery. Bạn tạo một tập dữ liệu huấn luyện chứa từng giao dịch thẻ và một số thuộc tính mà chúng tôi xác định là có thể chỉ ra hành vi gian lận một cách chính xác nhất, chẳng hạn như khoảng cách từ nhà khách hàng, thời gian trong ngày và số tiền giao dịch.

Sau đó, bạn sử dụng BQML để xây dựng mô hình hồi quy logistic nhằm dự đoán xem một giao dịch có phải là gian lận hay không dựa trên dữ liệu huấn luyện của chúng tôi. Một trong những tính năng thú vị của công nghệ học máy BQ là giải quyết việc kết hợp quá mức để dữ liệu huấn luyện của chúng tôi không ảnh hưởng đến hiệu suất của mô hình đối với dữ liệu mới. Cuối cùng, bạn tạo 3 giao dịch mẫu có các đặc điểm khác nhau và dự đoán các giao dịch đó có lừa đảo hay không sử dụng mô hình.

Kiến thức bạn sẽ học được

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thực hiện các thao tác sau:

  • Tải tập dữ liệu từ một bộ chứa Google Cloud Storage
  • Tạo dữ liệu huấn luyện
  • Tạo và huấn luyện mô hình hồi quy logistic
  • Sử dụng mô hình này để dự đoán liệu các giao dịch mẫu có phải là gian lận hay không
  • Xác định giao dịch gian lận bằng mã bưu chính bằng phương pháp phân tích không gian địa lý

2. Tải tập dữ liệu từ một bộ chứa GCS

Trong nhiệm vụ này, bạn tạo một tập dữ liệu có tên bq_demo và tải tập dữ liệu đó cùng với dữ liệu ngân hàng bán lẻ từ bộ chứa GCS. Thao tác này sẽ xoá mọi dữ liệu hiện có trong bảng.

Mở Cloud Shell

  1. Trong Bảng điều khiển Cloud, ở thanh công cụ trên cùng bên phải, hãy nhấp vào nút Kích hoạt Cloud Shell.

3c0c949fe3626208.pngS

  1. Sau khi tải giao diện đám mây, hãy nhập:
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. Sau khi hoàn tất, nhấp vào X để đóng thiết bị đầu cuối Cloud shell. Bạn đã tải thành công một tập dữ liệu từ một bộ chứa Google Cloud Storage.

3. Tạo dữ liệu huấn luyện

Truy vấn giao dịch gian lận theo loại thẻ

Trước khi tạo dữ liệu huấn luyện, hãy phân tích cách giao dịch gian lận được phân phối giữa các loại thẻ. Cơ sở dữ liệu ngân hàng bán lẻ của chúng tôi chứa cờ cho biết khi khách hàng đã báo cáo một giao dịch gian lận trong tài khoản của họ. Truy vấn này cho thấy số lượng giao dịch gian lận theo loại thẻ.

[Lưu ý cạnh tranh: Không giống như một số đối thủ cạnh tranh, BigQuery không yêu cầu bạn phải xuất dữ liệu trong kho dữ liệu sang bộ chứa lưu trữ, chạy các thuật toán học máy, sau đó sao chép kết quả trở lại cơ sở dữ liệu. Tất cả các thao tác này đều có thể thực hiện tại chỗ, giúp bảo mật dữ liệu và không làm "mở rộng dữ liệu".]

  1. Mở Bảng điều khiển BigQuery:

Trong Google Cloud Console, hãy chọn Trình đơn điều hướng > BigQuery.

dfdbd753a900e349.png

  1. Hộp thông báo Chào mừng bạn đến với BigQuery trong Cloud Console sẽ mở ra. Hộp thông báo này cung cấp đường liên kết đến hướng dẫn bắt đầu nhanh và ghi chú phát hành.

Nhấp vào Xong.

Bảng điều khiển BigQuery sẽ mở ra.

2982953ee582e477.pngs

  1. Chạy truy vấn trong Trình chỉnh sửa truy vấn:
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

Nhưng nếu chúng ta có thể sử dụng dữ liệu này để dự đoán các giao dịch gian lận ngay cả trước khi khách hàng phát hiện thì sao? Công nghệ học máy không chỉ dành cho chuyên gia. Nhờ BigQuery, các nhà phân tích có thể chạy các mô hình học máy đẳng cấp thế giới trực tiếp trên dữ liệu kho dữ liệu thông qua SQL.

Tạo dữ liệu huấn luyện

Tạo một tập dữ liệu huấn luyện chứa từng giao dịch thẻ và một số thuộc tính mà chúng tôi xác định là có thể chỉ ra hành vi gian lận một cách chính xác nhất, chẳng hạn như khoảng cách từ nhà khách hàng, thời gian trong ngày và số tiền giao dịch.

Chạy truy vấn trong Trình chỉnh sửa truy vấn:

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 );

Trong phần "Kết quả" nhấp vào "chuyển đến bảng" và bạn sẽ thấy kết quả như sau:

c03442924d2dc7f3.png

4. Tạo và huấn luyện mô hình

Sử dụng BQML để xây dựng mô hình hồi quy logistic nhằm dự đoán xem một giao dịch có phải là giao dịch gian lận hay không dựa trên dữ liệu huấn luyện của chúng tôi đã tạo ở bước trước. Một trong những tính năng thú vị của BQML là giải quyết vấn đề ghép nối quá mức để dữ liệu huấn luyện của chúng tôi không ảnh hưởng đến hiệu suất của mô hình đối với dữ liệu mới.

Chạy truy vấn trong Trình chỉnh sửa truy vấn:

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));

Xem chi tiết về mô hình

Trong phần "Kết quả", hãy nhấp vào "Chuyển đến Mô hình".

9417986e0fa45427.pngS

Bạn sẽ thấy các thẻ Lược đồ, Đào tạo và Đánh giá.

Trong "thẻ Huấn luyện", bạn sẽ thấy nội dung sau:

cb6b11a01816ba74.png

Trong thẻ "Đánh giá", bạn sẽ thấy:

ff47d42700a79544.png

Trong "Thẻ Giản đồ", bạn sẽ thấy:

edfd13025ed64705.png

5. Sử dụng mô hình để dự đoán gian lận

Bây giờ, hãy sử dụng mô hình của chúng tôi để dự đoán xem một giao dịch có khả năng là gian lận hay không. Chúng ta sẽ tạo 3 giao dịch mẫu với những đặc điểm khác nhau.

Chạy truy vấn sau trong trình chỉnh sửa truy vấn:

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)
);

Bạn sẽ thấy kết quả như sau:

c3c25d3652e45c9c.png

Như bạn có thể thấy, giao dịch đầu tiên gần như chắc chắn là gian lận dựa trên mô hình của chúng tôi trong khi giao dịch thứ 2 và thứ 3 được dự đoán không phải là gian lận. Chúng tôi đã đặt ngưỡng thành 55%, tăng từ giá trị mặc định là 50%. Chúng ta có thể huấn luyện mô hình bằng dữ liệu bổ sung hoặc thêm các thuộc tính bổ sung để cải thiện độ chính xác.

6. Xác định giao dịch gian lận bằng mã bưu chính bằng phương pháp phân tích không gian địa lý

BigQuery hỗ trợ dữ liệu không gian địa lý phong phú. Dưới đây là ví dụ về việc sử dụng hàm GIS ST_PARTY để xác định mã bưu chính dựa trên vĩ độ và kinh độ của giao dịch của người bán bằng cách sử dụng tập dữ liệu công khai về ranh giới mã bưu chính.

Chạy mã sau trong Trình chỉnh sửa truy vấn:

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;

Bạn sẽ thấy các kết quả sau:

6f0dfb6d93c0be11.pngs

Như bạn có thể thấy, tỷ lệ gian lận trong hầu hết các mã bưu chính là tương đối nhỏ (dưới 2%) nhưng tỷ lệ gian lận trong 69345 là một con số đáng ngạc nhiên 11%. Có thể chúng tôi muốn tìm hiểu vấn đề này.