Ngoại lệ trong chuỗi thời gian python

Ngoại lệ là gì?

Ngoại lệ là các điểm dữ liệu cách xa hầu hết các điểm dữ liệu khác

Trong ví dụ về chuỗi thời gian này, tất cả các điểm bên ngoài dải màu xanh có thể được coi là ngoại lệ

Làm cách nào để có được danh sách các ngoại lệ trong chuỗi thời gian?

Ở đây chúng ta sẽ sử dụng thư viện có tên là tsmoothie.
Đó là một thư viện python để làm mịn chuỗi thời gian và phát hiện ngoại lệ theo cách vector hóa.

Trên chuỗi thời gian trong hình. chúng ta có thể thấy rằng chúng ta có 4 ngoại lệ, chúng ta có thể lấy chúng bằng cách



import numpy as np
from tsmoothie.utils_func import sim_randomwalk
from tsmoothie.smoother import LowessSmoother

data = df['value'].values.reshape[1, -1]

# operate smoothing
smoother = LowessSmoother[smooth_fraction=0.1, iterations=1]
smoother.smooth[data]

# generate intervals
low, up = smoother.get_intervals['prediction_interval']

points = smoother.data[0]
up_points = up[0]
low_points = low[0]

for i in range[len[points]-1, 0, -1]:
    current_point = points[i]
    current_up = up_points[i]
    current_low = low_points[i]
    if current_point > current_up or current_point < current_low:
        print[f'found an outlier value: {current_point}']

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Xét rằng khung dữ liệu df có một cột có tên là 'giá trị'.
Vì vậy, chúng tôi nhận được đầu ra này sau khi chạy mã.

Chào mừng bạn đến với GrabNGoInfo. Hướng dẫn này sẽ nói về cách thực hiện phát hiện bất thường chuỗi thời gian bằng mô hình Tiên tri Facebook [Meta] trong Python. Dị thường còn được gọi là ngoại lệ và chúng tôi sẽ sử dụng hai thuật ngữ này thay thế cho nhau trong hướng dẫn này. Sau phần hướng dẫn, bạn sẽ học

  • Làm cách nào để đào tạo mô hình chuỗi thời gian bằng Tiên tri?
  • Làm cách nào để đưa ra dự đoán bằng mô hình Tiên tri?
  • Làm cách nào để xác định các ngoại lệ bằng cách sử dụng dự báo chuỗi thời gian của Nhà tiên tri?

Tài nguyên cho bài đăng này

  • Mã Python ở cuối bài. Nhấp vào đây để xem sổ ghi chép
  • Các video hướng dẫn khác về phát hiện sự bất thường và chuỗi thời gian
  • Các bài đăng trên blog khác về phát hiện bất thường và chuỗi thời gian
  • Nếu bạn thích phiên bản video của hướng dẫn, hãy xem video bên dưới trên YouTube

Phát hiện bất thường chuỗi thời gian bằng cách sử dụng tiên tri trong Python – GrabNGoInfo. com

Bắt đầu nào

Bước 0. Thuật toán phát hiện bất thường chuỗi thời gian

Ở bước 0, hãy nói về thuật toán phát hiện sự bất thường của chuỗi thời gian. Ở cấp độ cao, các ngoại lệ được phát hiện dựa trên khoảng thời gian dự đoán của chuỗi thời gian. Việc thực hiện bao gồm các bước sau

  1. Xây dựng mô hình dự báo chuỗi thời gian
  2. Đưa ra dự đoán về dữ liệu lịch sử bằng mô hình dự báo chuỗi thời gian
  3. So sánh các giá trị thực tế với các khoảng thời gian dự đoán. Giá trị ngoại lệ được định nghĩa là các điểm dữ liệu có giá trị thực tế nằm ngoài khoảng thời gian dự đoán

Bước 1. Cài đặt và nhập thư viện

Trong bước đầu tiên, chúng tôi sẽ cài đặt và nhập thư viện

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
6 là gói python để lấy dữ liệu chứng khoán từ Yahoo Finance.
# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
7 là gói dành cho mô hình chuỗi thời gian. Sau khi cài đặt 
# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
6 và 
# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
7, chúng sẽ được nhập vào sổ ghi chép

Chúng tôi cũng nhập 

# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
0 và 
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
1 để xử lý dữ liệu, 
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
2 và 
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
3 để trực quan hóa, và 
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
4 và 
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
5 để đánh giá hiệu suất mô hình

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
1

Bước 2. Kéo dữ liệu

Bước thứ hai lấy dữ liệu chứng khoán từ Yahoo Finance API. Dữ liệu hàng ngày trong hai năm từ đầu năm 2020 đến cuối năm 2021 được lấy cho phân tích này

  • # Pull close data from Yahoo Finance for the list of tickers
    ticker_list = ['GOOG']
    data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]
    
    # Change column names
    data = data.reset_index[]
    data.columns = ['ds', 'y']
    
    # Take a look at the data
    data.head[]
    6 vì ngày 1 tháng 1 là ngày nghỉ lễ và không có dữ liệu về kho hàng vào ngày lễ và cuối tuần
  • # Pull close data from Yahoo Finance for the list of tickers
    ticker_list = ['GOOG']
    data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]
    
    # Change column names
    data = data.reset_index[]
    data.columns = ['ds', 'y']
    
    # Take a look at the data
    data.head[]
    7 vì 
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    6 không bao gồm ngày kết thúc nên chúng tôi cần thêm một ngày vào ngày cuối cùng của ngày kết thúc dữ liệu
# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 

Mục tiêu của mô hình chuỗi thời gian là dự đoán giá đóng cửa của cổ phiếu Google, vì vậy, mã đánh dấu của Google 

# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
9 được sử dụng để lấy dữ liệu

Nhà tiên tri yêu cầu ít nhất hai cột làm đầu vào. một 

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
70 cột và một 
# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
71 cột

  • Cột 
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    70 có thông tin về thời gian. Hiện tại, chúng tôi có ngày làm chỉ mục, vì vậy, chúng tôi đặt lại chỉ mục và đổi tên
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    73 thành 
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    70
  • Cột y có các giá trị chuỗi thời gian. Trong ví dụ này, vì chúng ta đang dự đoán giá đóng cửa của Google nên tên cột của giá được thay đổi thành 
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    71
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
Bộ dữ liệu mô hình tiên tri – Hình ảnh từ GrabNGoInfo. com

Sử dụng 

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
76, chúng ta có thể thấy rằng tập dữ liệu có 505 bản ghi và không có giá trị nào bị thiếu

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
7

đầu ra

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
6

Tiếp theo, hãy hình dung giá đóng cửa của hai mã cổ phiếu bằng cách sử dụng 

# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
2 và thêm chú giải vào biểu đồ bằng cách sử dụng 
# Pull close data from Yahoo Finance for the list of tickers
ticker_list = ['GOOG']
data = yf.download[ticker_list, start=start_date, end=end_date][['Close']]

# Change column names
data = data.reset_index[]
data.columns = ['ds', 'y']

# Take a look at the data
data.head[]
3. Chúng ta có thể thấy rằng giá của Google đã tăng lên rất nhiều kể từ cuối năm 2020 và tăng gần gấp đôi vào cuối năm 2021

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
9
Biểu đồ xu hướng giá cổ phiếu Google – Hình ảnh từ GrabNGoInfo. com

Họ

Địa chỉ email.

Để trống trường này nếu bạn là người.

Bước 3. Xây dựng mô hình chuỗi thời gian bằng tiên tri trong Python

Ở bước 3, chúng ta sẽ xây dựng mô hình chuỗi thời gian bằng Prophet trong Python

Lưu ý rằng chúng tôi đã không thực hiện phân tách thử nghiệm huấn luyện cho tập dữ liệu mô hình hóa. Điều này là do mục tiêu của mô hình không phải là dự đoán giá cổ phiếu trong tương lai, thay vào đó, mục tiêu là phù hợp với một mô hình dự đoán tốt về giá trong quá khứ. Do đó, chúng tôi sẽ sử dụng toàn bộ tập dữ liệu cho cả đào tạo và dự báo

  • Khi bắt đầu mô hình nhà tiên tri, 
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    79 và 
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    60 được đặt rõ ràng thành True, sau đó khớp với dữ liệu đào tạo
  • _
    # Data start date
    start_date = '2020-01-02'
    
    # Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
    end_date = '2022-01-01' 
    61 được đặt thành 0. 99, có nghĩa là khoảng bất định là 99%

Chúng tôi giữ mô hình đơn giản trong ví dụ này để tập trung vào quá trình phát hiện bất thường. Nếu bạn quan tâm đến việc xây dựng một mô hình phức tạp, vui lòng tham khảo hướng dẫn trước của tôi Dự báo chuỗi thời gian đa biến với tính thời vụ và hiệu ứng ngày lễ bằng cách sử dụng tiên tri trong Python

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
3

Bước 4. Đưa ra dự đoán bằng cách sử dụng nhà tiên tri trong Python

Sau khi xây dựng mô hình, ở bước 4, chúng ta sử dụng mô hình để đưa ra dự đoán trên tập dữ liệu. Biểu đồ dự báo cho thấy rằng các dự đoán nói chung phù hợp với các giá trị thực tế

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
4
Dự đoán mô hình nhà tiên tri – Hình ảnh từ GrabNGoInfo. com

Chúng tôi cũng có thể kiểm tra biểu đồ thành phần để biết xu hướng, tính thời vụ hàng tuần và tính thời vụ hàng năm

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
5
Thành phần mô hình nhà tiên tri – Hình ảnh từ GrabNGoInfo. com

Bước 5. Kiểm tra hiệu suất mô hình chuỗi thời gian

Ở bước 5, chúng ta sẽ kiểm tra hiệu suất của mô hình chuỗi thời gian. Khung dữ liệu dự báo không bao gồm các giá trị thực tế, vì vậy chúng tôi cần hợp nhất khung dữ liệu dự báo với khung dữ liệu thực tế để so sánh các giá trị thực tế với các giá trị dự đoán. Hai chỉ số hiệu suất được bao gồm

  • MAE [Lỗi tuyệt đối trung bình] tổng hợp sự khác biệt tuyệt đối giữa thực tế và dự đoán và được chia cho số lượng dự đoán
  • MAPE [Lỗi tỷ lệ phần trăm trung bình tuyệt đối] tính tổng chênh lệch tỷ lệ phần trăm tuyệt đối giữa thực tế và dự đoán và được chia cho số lượng dự đoán. MAPE không phụ thuộc vào độ lớn của dữ liệu, vì vậy nó có thể được sử dụng để so sánh các dự báo khác nhau. Nhưng nó không xác định khi giá trị thực tế bằng không

Để biết thêm các chỉ số đánh giá hiệu suất theo chuỗi thời gian, chẳng hạn như MSE [Lỗi bình phương trung bình], RMSE [Lỗi bình phương trung bình gốc], MDAPE [Lỗi tỷ lệ phần trăm tuyệt đối trung bình] và SMAPE [Lỗi tỷ lệ phần trăm trung bình trung bình đối xứng], vui lòng tham khảo chuỗi thời gian hướng dẫn trước đây của tôi

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
6

Sai số tuyệt đối trung bình [MAE] của mô hình là 31 đô la, nghĩa là trung bình, dự báo sai lệch 31 đô la. Cho rằng giá của Google là hàng nghìn, dự đoán không tệ

Lỗi phần trăm tuyệt đối trung bình [MAPE] cho mô hình cơ sở là 1. 7%, nghĩa là trung bình, dự báo sai lệch 1. 7% giá cổ phiếu

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
0

Bước 6. Xác định sự bất thường

Ở bước 6, chúng ta sẽ xác định các điểm bất thường của chuỗi thời gian bằng cách kiểm tra xem giá trị thực có nằm ngoài khoảng bất định hay không. Nếu giá trị thực tế nhỏ hơn giới hạn dưới hoặc lớn hơn giới hạn trên của khoảng không chắc chắn, thì chỉ báo bất thường được đặt thành 1, nếu không, nó được đặt thành 0

Sử dụng

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
62, chúng tôi có thể thấy rằng có 6 giá trị ngoại lệ trong số 505 điểm dữ liệu

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
1

đầu ra

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
2

Sau khi in ra các điểm bất thường, chúng ta có thể thấy rằng tất cả các điểm bất thường đều thấp hơn giới hạn dưới của khoảng bất định

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
3
Kết quả phát hiện sự bất thường của chuỗi thời gian – Hình ảnh từ GrabNGoInfo. com

Trong phần trực quan hóa, tất cả các dấu chấm là giá trị thực và đường màu đen biểu thị giá trị dự đoán. Các chấm màu cam là ngoại lệ

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
4
Kết quả phát hiện bất thường chuỗi thời gian của nhà tiên tri – Hình ảnh từ GrabNGoInfo. com

Đặt tất cả các mã lại với nhau

# Data start date
start_date = '2020-01-02'

# Data end date. yfinance excludes the end date, so we need to add one day to the last day of data
end_date = '2022-01-01' 
5

Tóm lược

Trong hướng dẫn này, chúng ta đã thảo luận cách phát hiện bất thường chuỗi thời gian bằng Prophet trong Python. Bạn đã học

  • Làm cách nào để đào tạo mô hình chuỗi thời gian bằng Tiên tri?
  • Làm cách nào để đưa ra dự đoán bằng mô hình Tiên tri?
  • Làm cách nào để xác định các ngoại lệ bằng cách sử dụng dự báo chuỗi thời gian của Nhà tiên tri?

Để biết thêm thông tin về khoa học dữ liệu và máy học, vui lòng xem kênh YouTube và Trang phương tiện của tôi

Tôi có nên loại bỏ các ngoại lệ trong chuỗi thời gian không?

Bạn chỉ nên xóa các giá trị ngoại lệ khi có lý do chính đáng để làm như vậy . Một số ngoại lệ đại diện cho các biến thể tự nhiên trong dân số và chúng nên được giữ nguyên như trong tập dữ liệu của bạn. Chúng được gọi là ngoại lệ thực sự.

Làm cách nào để phát hiện sự bất thường trong dữ liệu chuỗi thời gian bằng Python?

ADTK là gói python mã nguồn mở để phát hiện sự bất thường của chuỗi thời gian . Tên ADTK là viết tắt của Bộ công cụ phát hiện bất thường. Gói này được phát triển bởi ARUNDO. Các tính năng của nó cho phép chúng tôi triển khai các mô hình thực dụng rất dễ dàng và các tính năng này cũng làm cho ADTK khác với các công cụ phát hiện bất thường khác.

Làm cách nào để phát hiện các điểm thay đổi và ngoại lệ theo mùa trong chuỗi thời gian của bạn?

Phát hiện và loại bỏ ngoại lệ .
Phân tách chuỗi thời gian bằng cách sử dụng phân tách theo mùa
Xóa xu hướng và tính thời vụ để tạo chuỗi thời gian còn lại
Phát hiện các điểm trong phần dư nằm ngoài 3 lần phạm vi liên vùng

Chủ Đề