Bối cảnh và vấn đề nghiên cứu

Khóa luận tốt nghiệp với đề tài "Ứng dụng ngôn ngữ Python vào dự đoán khách hàng rời bỏ dịch vụ ngân hàng" được thực hiện bởi sinh viên Lê Quang Đức (Mã sinh viên: 7103101310), thuộc lớp chuyên ngành Phân tích dữ liệu lớn trong Kinh tế và Kinh doanh, Khoa Kinh tế Số, Học viện Chính sách và Phát triển (Bộ Kế hoạch và Đầu tư), dưới sự hướng dẫn khoa học của TS. Đàm Thanh Tú vào năm 2023 tại Hà Nội.

Về bối cảnh thực tiễn, tác giả chỉ ra rằng trong thời đại Cách mạng công nghiệp 4.0 và nền kinh tế số, công nghệ thông tin đã trở thành công cụ hỗ trợ quan trọng trong hầu hết các lĩnh vực từ truyền thông, văn hóa, giáo dục, y tế cho đến quản trị kinh doanh. Phương thức kinh doanh và quản lý truyền thống bộc lộ nhiều điểm hạn chế như công tác thống kê chi tiết thiếu chuẩn xác, quy trình thanh toán chưa tối ưu về tốc độ và tính chặt chẽ. Sự hỗ trợ của các phần mềm quản lý, thanh toán điện tử và hệ thống phân tích dữ liệu lớn cho phép các tổ chức kinh tế theo dõi, kiểm soát hoạt động vận hành chuẩn xác hơn.

Trong lĩnh vực tài chính - ngân hàng, bài toán giữ chân khách hàng đóng vai trò sống còn đối với doanh thu và lợi nhuận. Sự xuất hiện của các đối thủ cạnh tranh mới trên thị trường với mức giá tốt hơn hoặc chất lượng dịch vụ vượt trội tạo ra áp lực lớn về tỷ lệ đào thải khách hàng. Việc tìm kiếm và thu hút một khách hàng mới thường tốn kém chi phí và khó khăn hơn nhiều so với việc duy trì, chăm sóc tệp khách hàng hiện tại. Do đó, nhu cầu dự đoán sớm những khách hàng có nguy cơ rời bỏ dịch vụ là nhiệm vụ cấp thiết trong quản trị kinh doanh hiện đại.

Mục tiêu và nhiệm vụ nghiên cứu của đề tài được xác định cụ thể:

  1. Nghiên cứu tổng quan lý thuyết về ngôn ngữ lập trình Python, lịch sử phát triển, cú pháp, cấu trúc dữ liệu, cấu trúc điều khiển và các thư viện chuyên dụng phục vụ khoa học dữ liệu.
  2. Tìm hiểu cơ chế và phương pháp xử lý dữ liệu bảng (định dạng CSV) thông qua module tích hợp và thư viện chuyên sâu Pandas, cùng kỹ thuật trực quan hóa dữ liệu với Matplotlib.
  3. Nghiên cứu bản chất lý thuyết của bài toán dự đoán khách hàng rời bỏ dịch vụ (Churn Prediction) trong hoạt động kinh doanh.
  4. Xây dựng chương trình thực nghiệm ứng dụng Python để giải quyết bài toán phân loại và dự đoán khả năng khách hàng rời bỏ dịch vụ trong lĩnh vực ngân hàng.

Đối tượng nghiên cứu của khóa luận là các cấu trúc lập trình Python, các thư viện phân tích dữ liệu lớn và dữ liệu hành vi của khách hàng sử dụng dịch vụ ngân hàng. Phạm vi nghiên cứu tập trung vào môi trường lập trình mã nguồn mở Python (tích hợp trên Visual Studio Code), các gói công cụ phân tích dữ liệu dạng bảng và mô hình dự đoán nhị phân (khách hàng rời bỏ hoặc ở lại) áp dụng cho dữ liệu ngân hàng.


Cơ sở lý thuyết và phương pháp

Cơ sở lý thuyết của khóa luận được xây dựng dựa trên nền tảng khoa học máy tính, kỹ thuật lập trình và khoa học dữ liệu ứng dụng trong kinh tế:

  • Nền tảng ngôn ngữ Python: Ngôn ngữ do Guido van Rossum bắt đầu xây dựng từ tháng 12/1989 tại CWI (Hà Lan), kế thừa từ ngôn ngữ ABC (lấy cảm hứng từ SETL) với khả năng xử lý ngoại lệ và tương tác hệ điều hành Amoeba. Văn bản nêu rõ các cột mốc: phiên bản 2.0 phát hành ngày 16/10/2000 bổ sung bộ dọn rác và Unicode; phiên bản 3.0 (Python 3000 hay Py3k) phát hành ngày 03/12/2008. Python mang đặc tính đa hình, hỗ trợ lập trình hướng đối tượng, hướng cấu trúc, lập trình theo chức năng, lập trình hướng khía cạnh (Aspect-oriented programming), thiết kế theo hợp đồng (design by contract) và lập trình luận lý.
  • Hệ sinh thái thư viện khoa học dữ liệu: Đề tài tổng hợp và khai thác hệ thống các thư viện mã nguồn mở chuyên dụng trong Python:
Tên thư viện Tác giả / Nguồn gốc Chức năng chính được nêu trong văn bản
NumPy Travis Oliphant Cung cấp đối tượng mảng nhiều chiều (dựa trên vector, ma trận) và tập hợp hàm toán học xử lý tính toán nhanh cho khoa học dữ liệu.
SciPy Travis Oliphant, Pearu Peterson, Eric Jones Hoàn thiện tính năng của NumPy, cung cấp thuật toán đại số tuyến tính, không gian ma trận, xử lý tín hiệu, xử lý ảnh, tối ưu hóa và biến đổi Fourier.
Pandas Python Data Analysis Library Cung cấp cấu trúc dữ liệu DataFrame và Series; hỗ trợ đọc/ghi dữ liệu (CSV, text, Excel, SQL, HDF5), xử lý dữ liệu thiếu, biến đổi bố cục, trượt, lập chỉ mục, group by, trộn và tổng hợp dữ liệu bảng.
Scikit-learn Phát triển từ SciKits Cung cấp công cụ tiền xử lý dữ liệu, các thuật toán học máy có giám sát và không giám sát, lựa chọn mô hình, kiểm định (validation) và đo lường sai số (error metrics).
IPython Fernando Perez Môi trường tương tác shell nâng cao, hỗ trợ trình duyệt web, đồ họa tích hợp, lưu trữ lịch sử dưới dạng JSON và tính toán song song.
Matplotlib Module pyplot Cung cấp giao diện vẽ đồ thị mở tương tự MATLAB, hỗ trợ biểu diễn dữ liệu thống kê trực quan thông qua các thành phần: Figure, Axes, Axis và Artist.
  • Phương pháp nghiên cứu:
    • Phương pháp phân tích - tổng hợp lý thuyết: Hệ thống hóa kiến thức lập trình cơ bản, cấu trúc dữ liệu (List, Dictionary, Set, Tuple), cấu trúc điều khiển (if, for, while), hàm (def, return, DocStrings).
    • Phương pháp xử lý dữ liệu dạng bảng: Sử dụng module csv (với các hàm xử lý dialect, các thiết lập trích dẫn QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE) và cấu trúc DataFrame của thư viện Pandas để truy xuất, cắt lát dữ liệu (head, tail, info, shape, trích xuất mảng NumPy qua .values).
    • Phương pháp trực quan hóa thống kê: Thiết lập các biểu đồ đường và biểu đồ phân tích bằng Matplotlib với các tham số định dạng màu sắc (r, g, b, y) và kiểu đường (-, --).
    • Phương pháp học máy dự đoán nhị phân: Thiết lập bài toán phân loại Churn Prediction với đầu ra nhị phân dạng biến giả $Y \in {0, 1}$ tương ứng với trạng thái "ở lại" hoặc "rời bỏ".

Nguồn dữ liệu của nghiên cứu bao gồm các tập dữ liệu thực nghiệm dạng bảng (tệp định dạng .csv), trong đó có ví dụ dữ liệu gồm 2.526 hàng và 14 cột được đưa vào kiểm thử các thao tác đọc, truy vấn và phân tích dữ liệu.


Nội dung chính theo từng chương

Chương 1: Khái quát về lý thuyết chung

Chương này tập trung trình bày toàn diện nền tảng kỹ thuật lập trình Python và cách thiết lập môi trường nghiên cứu khoa học dữ liệu:

  • Môi trường làm việc và cài đặt: Hướng dẫn chi tiết quy trình thiết lập môi trường lập trình trên các hệ điều hành (Windows, Mac, Linux), cài đặt phần mềm Visual Studio Code (VSCode), cấu hình extension Python của Microsoft (phím tắt Ctrl+Shift+X), tích hợp trình thông dịch và thiết lập biến môi trường qua tùy chọn "Add python.exe to PATH". Giới thiệu công cụ quản lý gói pip và cú pháp nâng cấp python -m pip install --upgrade pip.
  • Cú pháp và khái niệm lập trình cơ bản: Khái niệm dòng chú thích (sử dụng ký tự # để giải thích giả định, quyết định và chi tiết thuật toán), hằng số (Literal Constants), chuỗi ký tự (String), biến (Variable) và khái niệm đối tượng (Object).
  • Cấu trúc dữ liệu trong Python: Phân loại cấu trúc dữ liệu tích hợp sẵn và cấu trúc dữ liệu nâng cao:
    • List: Dữ liệu lưu trữ tuần tự, có thể thay đổi, truy xuất thông qua chỉ số (Index) bắt đầu từ 0.
    • Dictionary: Cấu trúc lưu trữ theo cặp khóa - giá trị (key - value), cho phép truy xuất dữ liệu thông qua khóa tương tự danh bạ điện thoại.
    • Set: Tập hợp các phần tử không có thứ tự và giá trị là duy nhất (tự động loại bỏ phần tử lặp lại).
    • Tuple: Bộ dữ liệu có thứ tự nhưng có tính bất biến (không thể chỉnh sửa sau khi khởi tạo).
    • Cấu trúc dữ liệu tự tạo: Khái quát các dạng Stack, Queue, Tree, Linked List.
  • Cấu trúc điều khiển và hàm: Trình bày chi tiết luồng thực thi của câu lệnh điều kiện if (khối lệnh if-block và else-block), vòng lặp for (duyệt qua tập hợp sequence), vòng lặp while (lặp theo điều kiện logic). Phân tích cấu trúc hàm thông qua từ khóa def, phân biệt rõ ràng giữa tham số (parameters) trong định nghĩa và đối số (arguments) khi gọi hàm; câu lệnh thoát và trả về giá trị return; kỹ thuật viết tài liệu giải thích chức năng hàm DocStrings ngay dưới tiêu đề hàm.
  • Xử lý tệp dữ liệu CSV: Trình bày định dạng tệp phân tách bằng dấu phẩy (Comma Separated Values). Phân tích các hàm tích hợp trong module csv (reader, writer, writerow, field_size_limit, get_dialect, list_dialects, register_dialect, unregister_dialect) và các cờ định dạng trích dẫn.
  • Thao tác nâng cao với Pandas DataFrame: Giới thiệu hàm pd.read_csv() cùng các tham số điều khiển (encoding='utf-8', sep=',', header, index_col, nrows). Minh họa các thao tác kỹ thuật trên DataFrame: kiểm tra độ dài len(), xem cấu trúc info(), xem kích thước .shape, lấy mẫu bản ghi đầu/cuối (head(), tail()), lọc một hoặc nhiều cột dữ liệu, trượt chỉ số lấy bản ghi liên tiếp df[0:5] và chuyển đổi cột dữ liệu sang mảng mảng số numpy arrays thông qua thuộc tính .values.
  • Trực quan hóa với Matplotlib: Phân tích cấu trúc biểu đồ phân cấp gồm 4 đối tượng thành phần (Figure - khung chứa chính; Axes - khung vẽ thành phần; Axis - các trục số xác định giới hạn; Artist - các đối tượng văn bản, đường kẻ hiển thị). Hướng dẫn phương thức plot() để dựng biểu đồ đường kèm theo các tùy biến màu sắc và kiểu nét vẽ.
+-----------------------------------------------------------------------------------+
| BẢNG TỔNG HỢP: CÁC CẤU TRÚC DỮ LIỆU TÍCH HỢP TRONG PYTHON (CHƯƠNG 1)               |
+-------------------+--------------------+--------------------+---------------------+
| Kiểu cấu trúc     | Đặc tính thứ tự    | Khả năng thay đổi  | Cơ chế lưu trữ      |
+-------------------+--------------------+--------------------+---------------------+
| List              | Có thứ tự          | Cho phép chỉnh sửa | Tuần tự theo Index  |
| Tuple             | Có thứ tự          | Bất biến (Không đổi| Tuần tự theo Index  |
| Dictionary        | Không theo thứ tự  | Cho phép chỉnh sửa | Cặp Key - Value     |
| Set               | Không có thứ tự    | Cho phép chỉnh sửa | Duy nhất (Không lặp)|
+-------------------+--------------------+--------------------+---------------------+

Chương 2: Bài toán ứng dụng dự đoán khách hàng rời bỏ dịch vụ

Nội dung chương 2 tập trung luận giải bài toán kinh doanh Churn Prediction dưới góc độ khoa học dữ liệu:

  • Bản chất của bài toán Churn Prediction: Định nghĩa bài toán dự đoán hành vi khách hàng quyết định ngừng sử dụng dịch vụ, không gia hạn hợp đồng hoặc chấm dứt giao dịch với doanh nghiệp. Về mặt toán học và học máy, đây là bài toán phân loại nhị phân (Binary Classification) với nhãn mục tiêu mang giá trị rời rạc "Có rời bỏ" (1) hoặc "Không rời bỏ" (0).
  • Ý nghĩa kinh tế và quản trị: Doanh nghiệp phải đối mặt với chi phí tìm kiếm khách hàng mới cao hơn nhiều so với việc duy trì khách hàng hiện hữu. Phân loại chuẩn xác nhóm khách hàng có nguy cơ rời bỏ cao giúp các nhà quản trị tập trung nguồn lực tiếp thị, đưa ra các chính sách can thiệp kịp thời để ngăn chặn tình trạng khách hàng ngưng sử dụng dịch vụ.
  • Các yếu tố tác động đến sự rời bỏ: Phân tích nguyên nhân khách hàng rời đi xuất phát từ biến động cạnh tranh trên thị trường (đối thủ cung cấp mức giá hấp dẫn hơn hoặc chất lượng dịch vụ tốt hơn) và trải nghiệm sử dụng dịch vụ của người tiêu dùng.

Chương 3: Bài toán dự đoán khách hàng rời bỏ dịch vụ ngân hàng

Chương 3 triển khai bài toán ứng dụng thực tế trên bộ dữ liệu khách hàng ngành ngân hàng với cấu trúc ba nội dung trọng tâm:

  • Diễn giải dữ liệu (Data Interpretation): Khảo sát các trường thông tin đặc trưng của khách hàng ngân hàng (hành vi giao dịch, số dư, thông tin nhân khẩu học, việc sử dụng các sản phẩm tài chính).
  • Xây dựng mô hình (Model Building): Áp dụng quy trình tiền xử lý dữ liệu và thiết lập các thuật toán phân loại học máy nhằm mô hình hóa xác suất rời bỏ dịch vụ của khách hàng.
  • Lựa chọn mô hình (Model Selection): Đánh giá, so sánh hiệu năng của các mô hình phân loại để lựa chọn phương án tối ưu cho bài toán dự báo trong thực tế vận hành ngân hàng.

Kết quả và đóng góp

  • Kết quả đạt được:

    • Hệ thống hóa đầy đủ khung lý thuyết lập trình Python cơ bản và nâng cao phục vụ trực tiếp cho hoạt động phân tích dữ liệu kinh tế và kinh doanh.
    • Chuẩn hóa quy trình kỹ thuật làm việc với dữ liệu bảng trong Python: từ khâu đọc file qua module csv (kiểm thử thành công tệp dữ liệu mẫu 2.526 hàng và 14 cột), tiền xử lý và lập chỉ mục trên DataFrame của Pandas, đến trích xuất mảng NumPy và trực quan hóa các chiều dữ liệu bằng Matplotlib.
    • Làm rõ bản chất kinh tế và phương pháp luận của bài toán Churn Prediction, chuyển đổi bài toán thực tế của ngành ngân hàng thành bài toán phân loại học máy nhị phân có đầu ra là nhãn rời bỏ ($1$) hoặc ở lại ($0$).
    • Thiết lập quy trình ba bước xử lý dữ liệu ngân hàng tại Chương 3 gồm: Diễn giải dữ liệu $\rightarrow$ Xây dựng mô hình $\rightarrow$ Lựa chọn mô hình tối ưu.
  • Giải pháp và kiến nghị của tác giả:

    • Đề xuất doanh nghiệp tài chính - ngân hàng cần chuyển đổi từ phương thức quản lý truyền thống sang ứng dụng các giải pháp phần mềm phân tích dữ liệu lớn nhằm nâng cao tính chính xác và kiểm soát hệ thống.
    • Kiến nghị ứng dụng mô hình dự đoán Churn Prediction như một công cụ phát hiện sớm để ngân hàng kịp thời triển khai các chương trình chăm sóc, tối ưu hóa chi phí vận hành thay vì phụ thuộc vào việc tìm kiếm khách hàng mới.
  • Đóng góp của khóa luận:

    • Tự xây dựng một tài liệu hướng dẫn thực hành lập trình Python có tính hệ thống cao, gắn kết chặt chẽ giữa lý thuyết khoa học máy tính với bài toán nghiệp vụ kinh tế số.
    • Cung cấp khung tham chiếu phương pháp luận từ xử lý dữ liệu thô đến xây dựng mô hình dự báo hành vi người tiêu dùng cho sinh viên chuyên ngành Phân tích dữ liệu lớn trong Kinh tế và Kinh doanh.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế:
    • Phạm vi nghiên cứu tại Chương 1 dành dung lượng lớn cho việc mô tả các thao tác cài đặt môi trường, cú pháp căn bản và chức năng của các hàm lập trình, do đó phần ứng dụng chuyên sâu về các thuật toán học máy phức tạp chưa được mở rộng chi tiết ở các khía cạnh toán học nâng cao.
    • Nghiên cứu tập trung chủ yếu vào định dạng dữ liệu có cấu trúc dạng bảng tĩnh (file CSV), chưa bao quát các luồng dữ liệu giao dịch thời gian thực (real-time streaming data) trong hệ thống ngân hàng.
  • Hướng nghiên cứu tiếp:
    • Mở rộng triển khai thực nghiệm đa dạng các thuật toán học máy giám sát phức tạp hơn trên thư viện Scikit-learn (như cây quyết định, rừng ngẫu nhiên, mô hình tăng cường độ dốc).
    • Tối ưu hóa quy trình kiểm định mô hình (validation) và đo lường các chỉ số sai số chuyên biệt (error metrics) cho tập dữ liệu mất cân bằng nhãn trong bài toán Churn Prediction.
    • Phát triển hệ thống dự báo tích hợp trực tiếp vào cơ sở dữ liệu vận hành của ngân hàng để đưa ra cảnh báo tự động theo thời gian thực.

Giá trị tham khảo

Khóa luận là tài liệu học thuật có giá trị tham khảo thiết thực cho các nhóm đối tượng:

  1. Sinh viên chuyên ngành Kinh tế số, Phân tích dữ liệu lớn trong Kinh tế và Kinh doanh: Cung cấp tài liệu tổng hợp đầy đủ từ việc làm quen với cú pháp Python, cài đặt IDE VSCode, cấu trúc dữ liệu đến các thao tác trên Pandas DataFrame và Matplotlib.
  2. Người làm nghiên cứu về Marketing và Quản trị quan hệ khách hàng (CRM): Cung cấp góc nhìn thực tiễn về cách tiếp cận bài toán Churn Prediction, lý do kinh tế của việc ngăn chặn khách hàng rời đi và phương pháp biến đổi hành vi khách hàng thành các bài toán phân loại học máy.
  3. Học viên bắt đầu học Khoa học dữ liệu: Phần trình bày chi tiết về module csv, các tham số của hàm pd.read_csv() (sep, header, index_col, nrows) và cách truy xuất dữ liệu là tài liệu thực hành hữu ích.

Câu hỏi thường gặp

1. Ai là tác giả phát triển ban đầu của ngôn ngữ Python và các thư viện phân tích dữ liệu NumPy, SciPy, Pandas, Scikit-learn, IPython được đề cập trong khóa luận? Theo văn bản, Python được tạo ra vào tháng 12/1989 bởi Guido van Rossum tại CWI (Hà Lan). Thư viện NumPy được tạo bởi Travis Oliphant. Thư viện SciPy là dự án gốc của Travis Oliphant, Pearu Peterson và Eric Jones. IPython được phát triển bởi Fernando Perez. Thư viện Scikit-learn bắt đầu từ dự án SciKits và Pandas là thư viện phân tích dữ liệu cấu trúc bảng của hệ sinh thái Python.

2. Bản chất kỹ thuật của bài toán Churn Prediction trong khóa luận được định nghĩa như thế nào? Churn Prediction được định nghĩa là bài toán dự đoán xác suất khách hàng ngừng sử dụng dịch vụ hoặc không gia hạn hợp đồng với doanh nghiệp dựa trên lịch sử hành vi sử dụng. Về mặt kỹ thuật phân loại, đầu ra của bài toán là biến nhị phân rời rạc mang giá trị $1$ (rời bỏ) hoặc $0$ (ở lại).

3. Module CSV tích hợp trong Python hỗ trợ những cờ thiết lập trích dẫn (quoting) nào? Module csv trong văn bản hỗ trợ 4 cờ trích dẫn chính: QUOTE_ALL (trích dẫn tất cả các trường), QUOTE_MINIMAL (chỉ trích dẫn các trường chứa ký tự đặc biệt như dấu ngoặc kép, dấu phân cách), QUOTE_NONNUMERIC (trích dẫn tất cả các trường không phải là số) và QUOTE_NONE (không bao giờ trích dẫn các trường).

4. Bốn thành phần chính cấu thành một đối tượng biểu đồ trong thư viện Matplotlib là gì? Bốn thành phần cấu thành một Matplotlib figure theo phân tích của tác giả gồm:

  • Figure: Khung cửa sổ chính chứa toàn bộ các đối tượng vẽ.
  • Axes: Khung vẽ thực tế nằm bên trong Figure, nơi các đường nét và đồ thị được hiển thị.
  • Axis: Các trục số xác định giới hạn và tỉ lệ của đồ thị.
  • Artist: Mọi đối tượng trực quan nhìn thấy được trên figure (như Text objects, Line2D objects, collection objects).

5. Cấu trúc triển khai bài toán thực nghiệm ở Chương 3 của khóa luận bao gồm những bước nào? Chương 3 của khóa luận được phân chia thành 3 bước triển khai tuần tự: Diễn giải dữ liệu (khảo sát và hiểu cấu trúc dữ liệu khách hàng ngân hàng), Xây dựng mô hình (áp dụng thuật toán phân loại) và Lựa chọn mô hình (so sánh hiệu năng để chọn ra mô hình tối ưu).


Kết luận

Khóa luận tốt nghiệp của sinh viên Lê Quang Đức đã hệ thống hóa một cách chi tiết nền tảng lý thuyết lập trình Python và các thư viện khoa học dữ liệu tiêu chuẩn (NumPy, SciPy, Pandas, Matplotlib, Scikit-learn). Công trình luận giải rõ nét bản chất kinh tế và phương pháp kỹ thuật của bài toán dự đoán khách hàng rời bỏ dịch vụ (Churn Prediction) trong lĩnh vực tài chính - ngân hàng. Toàn bộ nội dung khóa luận phản ánh đúng định hướng ứng dụng công nghệ phân tích dữ liệu lớn vào giải quyết các bài toán quản trị kinh doanh thực tiễn trong kỷ nguyên số.