Ví dụ nghiên cứu trường hợp Python

Cách hiệu quả nhất để học khoa học dữ liệu là giải quyết các vấn đề liên quan đến khoa học dữ liệu. Đọc, nghe và ghi chép là có giá trị, nhưng một khi bạn giải quyết vấn đề, các khái niệm sẽ củng cố từ những điều trừu tượng thành các công cụ mà bạn cảm thấy tự tin khi sử dụng. Nói chung, một dự án khoa học dữ liệu toàn chu trình bao gồm các giai đoạn sau

  1. Thu thập & sắp xếp dữ liệu
  2. Phân tích dữ liệu & lập mô hình
  3. Truyền thông & Triển khai

Trong nghiên cứu điển hình này, chúng ta sẽ xem qua phần Phân tích, Lập mô hình và Giao tiếp của quy trình làm việc. Các bước chung liên quan để giải quyết vấn đề khoa học dữ liệu như sau

  1. Hiểu vấn đề và dữ liệu
  2. Khám phá dữ liệu / làm sạch dữ liệu
  3. Kỹ thuật tính năng / lựa chọn tính năng
  4. Thiết lập thước đo hiệu suất
  5. Đánh giá và lựa chọn mô hình
  6. tối ưu hóa mô hình
  7. Rút ra kết luận và tài liệu làm việc

Những bạn chưa quen thuộc với lĩnh vực Khoa học dữ liệu và ngôn ngữ lập trình Python vẫn có thể theo dõi hết bài viết vì nó sẽ cung cấp một cái nhìn tổng quan ở mức độ cao về cách tiếp cận và giải quyết các loại vấn đề này.

Mặc dù một số đoạn mã được bao gồm trong blog, nhưng để biết mã đầy đủ, bạn có thể xem Sổ ghi chép Jupyter này

Định nghĩa vấn đề

Mercari là ứng dụng mua sắm được hỗ trợ bởi cộng đồng lớn nhất Nhật Bản, nơi mọi người có thể bán và mua nhiều loại sản phẩm mới và đã qua sử dụng của các thương hiệu khác nhau, từ áo len đến điện thoại thông minh. Bây giờ Mercari muốn đề xuất giá chính xác cho người bán nhưng điều này rất khó vì người bán của họ được phép đặt bất kỳ thứ gì hoặc bất kỳ gói hàng nào trên thị trường của Mercari

Vì vậy, mục tiêu của chúng tôi là xây dựng một mô hình tự động đề xuất giá sản phẩm phù hợp cho người bán. Chúng tôi được cung cấp các thông tin sau cho từng sản phẩm

train_id — id của sản phẩm

tên — tiêu đề của sản phẩm

item_condition_id — tình trạng của sản phẩm do người bán cung cấp

category_name — danh mục của sản phẩm

brand_name — tên thương hiệu của sản phẩm

vận chuyển — 1 nếu phí vận chuyển do người bán thanh toán và 0 nếu phí vận chuyển do người mua thanh toán

item_description — mô tả đầy đủ về sản phẩm

giá - giá mà sản phẩm được bán [Đây là biến mục tiêu mà chúng tôi sẽ dự đoán]

Loại vấn đề này thuộc danh mục Học máy hồi quy có giám sát

  • giám sát. Chúng tôi có quyền truy cập vào cả các tính năng và mục tiêu và mục tiêu của chúng tôi là đào tạo một mô hình có thể tìm hiểu ánh xạ giữa hai
  • hồi quy. Biến mục tiêu, giá, là một biến liên tục
Phân tích dữ liệu khám phá [EDA]

EDA là một quy trình không giới hạn trong đó chúng tôi tính toán số liệu thống kê và lập số liệu để tìm ra xu hướng, điểm bất thường, mẫu hoặc mối quan hệ trong dữ liệu. Nói tóm lại, mục tiêu của EDA là tìm hiểu xem dữ liệu của chúng tôi có thể cho chúng tôi biết điều gì. Nó thường bắt đầu với một cái nhìn tổng quan cấp cao, sau đó thu hẹp vào các lĩnh vực cụ thể khi chúng tôi tìm thấy những phần thú vị của dữ liệu. Các phát hiện có thể thú vị theo cách riêng của chúng hoặc chúng có thể được sử dụng để cung cấp thông tin cho các lựa chọn lập mô hình của chúng tôi, chẳng hạn như bằng cách giúp chúng tôi quyết định nên sử dụng các tính năng nào. Khi vội vàng chuyển sang giai đoạn học máy, một số nhà khoa học dữ liệu hoặc bỏ qua hoàn toàn quá trình khám phá hoặc thực hiện một công việc rất chiếu lệ nhưng trên thực tế, EDA là một trong những bước quan trọng nhất để giải quyết vấn đề liên quan đến khoa học dữ liệu

Bộ dữ liệu có thể được tải xuống từ Kaggle. Để xác thực kết quả, chúng tôi chỉ cần 'đào tạo. tệp dữ liệu tsv'. Vậy hãy bắt đầu

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split

Chúng ta sẽ chia dữ liệu thành tập huấn luyện và tập kiểm tra theo tỷ lệ lần lượt là 80% và 20%. Theo thông lệ, chúng tôi sẽ chỉ tiến hành EDA trên tập dữ liệu tàu

In:
data = pd.read_csv['train.tsv', sep='\t']
train, test = train_test_split[data, test_size=0.2]
print[train.shape, test.shape]
Out:
[1186028, 8] [296507, 8]

Có khoảng 1. 18 triệu điểm dữ liệu/hàng trong dữ liệu tàu và 0. 296 triệu điểm dữ liệu/hàng trong dữ liệu thử nghiệm. 8 là số cột/tính năng trong cả hai bộ. Các tính năng và biến có nghĩa giống nhau ở đây, vì vậy chúng có thể được sử dụng thay thế cho nhau trong blog

#this command displays first few rows of the data set
train.head[]

Kiểm tra các giá trị còn thiếu

Một vấn đề phổ biến khi xử lý dữ liệu trong thế giới thực là thiếu giá trị. Những điều này có thể phát sinh vì nhiều lý do và phải được điền hoặc xóa trước khi chúng tôi đào tạo một mô hình máy học. Trước tiên, hãy tìm hiểu xem có bao nhiêu giá trị bị thiếu trong mỗi cột

Tính năng ‘brand_name’ có 42% giá trị bị thiếu. Một số cách tiếp cận thường được xem xét trong khi xử lý các giá trị bị thiếu là

  1. Xóa các bản ghi có giá trị bị thiếu
  2. Tự xóa tính năng này nếu số lượng giá trị bị thiếu cao hơn một số ngưỡng, chẳng hạn như 50%
  3. Coi 'các giá trị bị thiếu' là một danh mục khác của chính tính năng tương ứng đó

Trong dự án này, chúng tôi sẽ tiếp tục với cách tiếp cận thứ ba

Bây giờ chúng ta sẽ bắt đầu phân tích từng tính năng một. Trước tiên, chúng ta sẽ xem xét biến mục tiêu, Giá, sau đó bắt đầu phân tích từng biến dự đoán và cũng xem cách nó tương tác với biến Giá

Giá bán

Hãy kiểm tra phân phối của biến Giá và xem qua một số thống kê cơ bản

train['price'].plot.hist[bins=50, figsize=[10,5], edgecolor='white',range=[0,500]]
plt.xlabel['Price', fontsize=15]
plt.ylabel['Frequency', fontsize=15]
plt.tick_params[labelsize=15]
plt.title['Price Distribution - Training Set', fontsize=17]
plt.show[]

train['price'].describe[]

  • Phân phối của biến Giá phù hợp với số liệu thống kê ở trên, i. e. phân phối bị lệch phải
  • Giá trung bình của các mặt hàng là $17
  • 75% mặt hàng có giá dưới $29
  • Giá tối đa của một mặt hàng từ dữ liệu là $2009
Phí vận chuyển
In:
train['shipping'].value_counts[normalize=True]*100
Out:
0 55.267667
1 44.732333
Name: shipping, dtype: float64

Phí vận chuyển 55. 26% các mặt hàng được thanh toán bởi người mua. Hãy xem tính năng vận chuyển liên quan như thế nào với giá cả

Giá trung bình của các sản phẩm là $14. 0 nếu người bán trả tiền vận chuyển trong khi giá trung bình của sản phẩm là $20. 0 nếu người mua trả tiền vận chuyển

Thông thường khi mua hàng trực tuyến, chúng ta cần trả phí vận chuyển hoặc giao hàng cho những sản phẩm thấp hơn một mức giá nhất định. Nhưng ở đây, xu hướng lại ngược lại vì giá trung bình của các mặt hàng mà người bán trả phí vận chuyển thấp hơn giá trung bình của các mặt hàng mà người mua trả phí vận chuyển

Tình trạng mặt hàng

'item_condition_id' có năm giá trị duy nhất nằm trong khoảng từ 1 đến 5. Số thấp hơn, tình trạng của mặt hàng tốt hơn

In:
train['item_condition_id'].value_counts[normalize=True, sort=False]*100
Out:
1 43.194511
2 25.323264
3 29.166934
4 2.153153
5 0.162138
Name: item_condition_id, dtype: float64

43% mặt hàng có ID tình trạng mặt hàng là 1 trong khi chỉ có 0. 16% mặt hàng có ID tình trạng mặt hàng có 5. Hãy xem tính năng này liên quan như thế nào với Giá. Để so sánh và hình dung mối quan hệ giữa biến phân loại và biến số, Box-Plots rất hữu ích. Mã dưới đây được sử dụng để vẽ Box-Plots

#for easier visualization, we are considering the prices from range of 0-100
price_100 = train[train['price']

Chủ Đề