Professional Documents
Culture Documents
04 HoangQuyMui 21521147
04 HoangQuyMui 21521147
04 HoangQuyMui 21521147
BÁO CÁO ĐỒ ÁN
Lớp: CS116.O21
GVHD: Nguyễn Vũ Anh Khoa
Sinh viên thực hiện: Hoàng Quý Mùi – 21521147
Sơn Men Kâl – 21522178
Trần Trọng Nhân – 21522924
Lê Đại Trình – 22521536
I. GIỚI THIỆU
1.1. Giới thiệu bài toán
Trong lĩnh vực tài chính tiêu dùng, thiếu lịch sử tín dụng có thể do nhiều lý do như tuổi trẻ
hoặc ưa thích dùng tiền mặt, khiến nhiều người bị từ chối vay. Nhà cung cấp tài chính cần
xác định khả năng trả nợ của khách hàng, và dữ liệu đóng vai trò quan trọng trong việc này.
Khoa học dữ liệu có thể giúp dự đoán khả năng trả nợ tốt hơn, làm cho các khoản vay dễ tiếp
cận hơn.
Hiện tại, các nhà cung cấp dùng thống kê và học máy để dự đoán rủi ro cho vay, nhưng hành
vi khách hàng thay đổi liên tục, đòi hỏi cập nhật thường xuyên bảng điểm, tốn nhiều thời
gian. Sự ổn định của bảng điểm là rất quan trọng để tránh cấp vay cho khách hàng không đủ
điều kiện. Home Credit, thành lập năm 1997, là nhà cung cấp tài chính tiêu dùng quốc tế, tập
trung vào vay có trách nhiệm cho những người ít hoặc không có lịch sử tín dụng. Cuộc thi
trên Kaggle nhằm cải thiện dự đoán rủi ro tín dụng, giúp chấp nhận nhiều đơn vay hơn và cải
thiện cuộc sống của những người thiếu lịch sử tín dụng.
1
Lập trình Python cho Máy học - CS116.O21
• Thu nhập hàng năm: Phân tích phân phối thu nhập, xem xét ảnh hưởng của mức
thu nhập đến khả năng trả nợ.
• Nghề nghiệp: Phân loại nghề nghiệp và đánh giá mức độ rủi ro của các nhóm
nghề nghiệp khác nhau.
• Thời gian làm việc: Xem xét thời gian làm việc tại công ty hiện tại và mối quan
hệ với khả năng trả nợ.
3. Lịch sử tín dụng:
• Số lượng khoản vay trước đó: Kiểm tra xem khách hàng đã từng vay bao nhiêu
lần và khả năng trả nợ của họ trong quá khứ.
• Tình trạng các khoản vay trước: Phân tích tình trạng của các khoản vay trước (đã
trả xong, đang trả, quá hạn) và ảnh hưởng của chúng đến rủi ro tín dụng hiện tại.
• Mức dư nợ hiện tại: Đánh giá mức dư nợ hiện tại và khả năng trả nợ.
4. Thông tin tài sản:
• Giá trị tài sản: Phân tích giá trị tài sản của khách hàng và mối quan hệ với khả
năng trả nợ.
• Loại tài sản: Phân loại các loại tài sản và đánh giá rủi ro tín dụng dựa trên loại tài
sản mà khách hàng sở hữu.
5. Thông tin khác:
• Số lượng người phụ thuộc: Phân tích số lượng người phụ thuộc trong gia đình và
ảnh hưởng của nó đến khả năng trả nợ.
• Mục đích vay vốn: Đánh giá các mục đích vay vốn khác nhau và mức độ rủi ro
tương ứng.
2
Lập trình Python cho Máy học - CS116.O21
3
Lập trình Python cho Máy học - CS116.O21
4
Lập trình Python cho Máy học - CS116.O21
Tương tự cho các file test bằng cách đổi ‘train’ thành ‘test’.
• Áp dụng bộ lọc cột bằng cách sử dụng phương pháp filter_cols từ lớp Pipeline vào
DataFrame df_train bằng cách sử dụng phương pháp pipe.
df_train = df_train.pipe(Pipeline.filter_cols)
• Chuyển đổi DataFrame df_train sang DataFrame Pandas và lấy tên các cột phân loại.
5
Lập trình Python cho Máy học - CS116.O21
• Giảm dung lượng bộ nhớ của DataFrame df_train bằng cách sử dụng hàm
reduce_mem_usage để tối ưu hóa việc sử dụng bộ nhớ.
df_train = reduce_mem_usage(df_train)
• Chọn các cột số (loại trừ các cột phân loại) từ DataFrame và lưu tên của chúng vào
biến nums.
nums = df_train.select_dtypes(exclude=’category’).columns
• Tạo DataFrame nans_df để xác định các giá trị thiếu trong các cột số.
nans_df = df_train[nums].isna()
• Khởi tạo một từ điển trống để lưu trữ các cột số được nhóm lại dựa trên số lượng giá
trị thiếu.
nans_groups = {}
• Lặp qua từng cột số (col) và tính toán số lượng giá trị thiếu cho mỗi cột. Sau đó,
nhóm các cột dựa trên số lượng giá trị thiếu trong từ điển nans_groups.
for col in nums:
cur_group = nans_df[col].sum()
try:
nans_groups[cur_group].append(col)
except:
nans_groups[cur_group]=[col]
• Tạo hàm reduce_group(grps) nhằm giảm số lượng cột trong mỗi nhóm bằng cách
chọn cột có số lượng giá trị duy nhất cao nhất.
- Đầu vào: danh sách các nhóm, mỗi nhóm được đại diện bởi một danh sách tên
cột.
- Hàm trả về danh sách các cột được chọn trong mỗi nhóm.
6
Lập trình Python cho Máy học - CS116.O21
• Chọn các cột trong df_test khớp với các cột trong df_train, ngoại trừ cột "target".
Điều này đảm bảo rằng tập kiểm tra có các tính năng giống như tập huấn luyện.
df_test = df_test.select([col for col in df_train.columns if col != "target"])
• Chuyển đổi DataFrame df_train sang DataFrame Pandas và lấy tên các cột phân loại.
df_test, cat_cols = to_pandas(df_test)
• Giảm dung lượng bộ nhớ của DataFrame df_train bằng cách sử dụng hàm
reduce_mem_usage để tối ưu hóa việc sử dụng bộ nhớ.
df_test = reduce_mem_usage(df_test)
• Thêm cột ‘target’ vào bộ kiểm thử với các giá trị = 1
df_test['target'] = 1
• Gộp bộ huấn luyện và bộ kiểm thử dọc theo các hàng và tối ưu hóa bộ nhớ
df_train = pd.concat([df_train, df_test])
df_train = reduce_mem_usage(df_train)
7
Lập trình Python cho Máy học - CS116.O21
• Sử dụng joblib để lưu các bộ dữ liệu (df_train), mục tiêu (y) và bộ kiểm tra (df_test)
vào tệp có tên data.pkl
joblib.dump((df_train,y,df_test),'data.pkl')
• Huấn luyện và lưu trữ mô hình đã huấn luyện vào một danh sách rỗng (sử dụng
LGBMClassifier())
fitted_models_lgb=[]
model = lgb.LGBMClassifier()
model.fit(df_train,y)
fitted_models_lgb.append(model)
8
Lập trình Python cho Máy học - CS116.O21
df_test = df_test.drop(columns=["WEEK_NUM",'target'])
df_test = df_test.set_index("case_id")
9
Lập trình Python cho Máy học - CS116.O21
10