Tạo đặc trưng theo thời gian

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Trích xuất đặc trưng với cửa sổ

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Dùng .aggregate để trích xuất đặc trưng

# Trực quan hóa dữ liệu thô
print(prices.head(3))
symbol            AIG        ABT
date                            
2010-01-04  29.889999  54.459951
2010-01-05  29.330000  54.019953
2010-01-06  29.139999  54.319953
# Tính rolling window rồi trích xuất hai đặc trưng
feats = prices.rolling(20).aggregate([np.std, np.max]).dropna()
print(feats.head(3))
                 AIG                  ABT           
                 std       amax       std       amax
date                                                
2010-02-01  2.051966  29.889999  0.868830  56.239949
2010-02-02  2.101032  29.629999  0.869197  56.239949
2010-02-03  2.157249  29.629999  0.852509  56.239949
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Kiểm tra tính chất của đặc trưng!

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Dùng partial() trong Python

# Nếu chỉ lấy mean, nó trả về một giá trị duy nhất
a = np.array([[0, 1, 2], [0, 1, 2], [0, 1, 2]])
print(np.mean(a))
1.0
# Có thể dùng partial để khởi tạo np.mean 
# với tham số axis
from functools import partial
mean_over_first_axis = partial(np.mean, axis=0)

print(mean_over_first_axis(a))
[0. 1. 2.]
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Percentile tóm tắt dữ liệu của bạn

  • Percentile là cách hữu ích để tóm tắt dữ liệu chi tiết hơn (so với dùng np.mean)
  • Với một tập dữ liệu, percentile thứ N là giá trị mà N% dữ liệu nằm dưới điểm đó và 100−N% nằm trên.
print(np.percentile(np.linspace(0, 200), q=20))
40.0
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Kết hợp np.percentile() với partial để tính dải percentile

data = np.linspace(0, 100)

# Tạo danh sách hàm bằng list comprehension
percentile_funcs = [partial(np.percentile, q=ii) for ii in [20, 40, 60]]

# Tính đầu ra của mỗi hàm theo cùng một cách
percentiles = [i_func(data) for i_func in percentile_funcs]
print(percentiles)
[20.0, 40.00000000000001, 60.0]
# Tính nhiều percentile cho một rolling window
data.rolling(20).aggregate(percentiles)
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Tính đặc trưng "dựa trên ngày"

  • Đến giờ ta tập trung vào đặc trưng "thống kê" – các đặc trưng phản ánh tính chất dữ liệu như "mean", "standard deviation", v.v.
  • Nhưng đừng quên timeseries thường có thêm đặc trưng "theo ngày" như thứ, ngày nghỉ, v.v.
  • Các đặc trưng này hữu ích khi xử lý chuỗi thời gian kéo dài nhiều năm (như giá cổ phiếu theo thời gian)
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Đặc trưng datetime với Pandas

# Đảm bảo index là datetime
prices.index = pd.to_datetime(prices.index)

# Trích xuất đặc trưng datetime
day_of_week_num = prices.index.weekday
print(day_of_week_num[:10])
Index([0 1 2 3 4 0 1 2 3 4], dtype='object')
day_of_week = prices.index.day_name()
print(day_of_week[:10])
Index(['Monday' 'Tuesday' 'Wednesday' 'Thursday' 'Friday' 'Monday' 'Tuesday'
 'Wednesday' 'Thursday' 'Friday'], dtype='object')
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Cùng luyện tập nào!

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Preparing Video For Download...