Kiểm tra lại hoặc xác thực chéo khi quy trình xây dựng mô hình tương tác


9

Tôi có một số mô hình dự đoán có hiệu suất mà tôi muốn kiểm tra lại (nghĩa là lấy dữ liệu của tôi, "tua lại" đến thời điểm trước đó và xem mô hình sẽ thực hiện như thế nào trong tương lai).

Vấn đề là một số mô hình của tôi đã được xây dựng thông qua một quá trình tương tác. Chẳng hạn, làm theo lời khuyên trong Chiến lược mô hình hồi quy của Frank Harrell , trong một mô hình tôi đã sử dụng các khối vuông bị hạn chế để xử lý các mối liên hệ phi tuyến có thể có giữa các tính năng và phản hồi. Tôi đã phân bổ mức độ tự do của mỗi spline dựa trên sự kết hợp giữa kiến ​​thức miền và các biện pháp mạnh mẽ của sự liên kết. Nhưng mức độ tự do mà tôi muốn cho phép mô hình của tôi rõ ràng phụ thuộc vào kích thước của tập dữ liệu, thay đổi đáng kể khi kiểm tra lại. Nếu tôi không muốn tự tay chọn mức độ tự do cho mỗi lần mô hình được kiểm tra lại, các lựa chọn khác của tôi là gì?

Một ví dụ khác, tôi hiện đang làm việc về phát hiện ngoại lệ thông qua việc tìm kiếm các điểm có đòn bẩy cao. Nếu tôi hài lòng khi làm điều này bằng tay, tôi chỉ cần nhìn vào từng điểm dữ liệu có đòn bẩy cao, kiểm tra sự tỉnh táo rằng dữ liệu có sạch không, và lọc nó ra hoặc làm sạch nó bằng tay. Nhưng điều này phụ thuộc vào một loạt kiến ​​thức về miền, vì vậy tôi không biết cách tự động hóa quy trình.

Tôi sẽ đánh giá cao lời khuyên và giải pháp cả (a) cho vấn đề chung về tự động hóa các phần tương tác của quy trình xây dựng mô hình, hoặc (b) lời khuyên cụ thể cho hai trường hợp này. Cảm ơn!

Câu trả lời:


4

FYI, điều này có thể phù hợp hơn với SE.DataScience, nhưng hiện tại, tôi sẽ trả lời nó ở đây.

Đối với tôi có vẻ như bạn có thể ở trong một tình huống mà bạn sẽ không có lựa chọn nào khác ngoài việc viết một kịch bản sẽ thực hiện các giải pháp của bạn. Chưa bao giờ làm việc với splines, kiến ​​thức của tôi về chúng hoàn toàn là lý thuyết, vì vậy hãy đồng ý với tôi và cho tôi biết nếu có bất cứ điều gì tôi không nhìn thấy.

Nói rộng ra, có vẻ như bạn có một vài mục khác nhau mà bạn sẽ phải giải quyết để thực hiện việc này.

1.) Xác định các tham số mô hình theo kiểu động. Trước đây bạn đã đề cập rằng bạn đã sử dụng kết hợp kiến ​​thức tên miền và các biện pháp đơn biến. Điều đó đối với tôi giống như một cái gì đó mà bạn sẽ có thể xử lý heuristur. Bạn sẽ phải đồng ý ngay từ đầu về một bộ quy tắc mà chương trình của bạn sẽ thực hiện. Điều này có thể hoặc không phải là một nhiệm vụ tầm thường vì bạn sẽ phải thực hiện một số suy nghĩ khó khăn về ý nghĩa tiềm năng của các quy tắc đó. Điều này có thể yêu cầu bạn truy cập lại từng bước trong quy trình của bạn và lập danh mục không chỉ các quyết định, mà còn cả lý do đằng sau các quyết định đó.

2.) Thực tế thực hiện chương trình của bạn. Để làm cho thử nghiệm hiệu suất của bạn trở nên năng động, dễ dàng để duy trì và sửa đổi trong tương lai, bạn sẽ phải suy nghĩ về cách bạn sẽ cấu trúc nó. Bạn có thể muốn sử dụng một số loại vòng lặp để ước tính hiệu suất dự đoán mô hình chính của mình, tốt nhất là với độ dài có thể xác định được của người dùng để cho phép linh hoạt hơn trong tương lai. Bạn cũng có thể muốn viết các chức năng riêng biệt cho từng hành động mà bạn muốn chương trình của mình thực hiện vì điều này sẽ giúp kiểm tra chức năng dễ dàng hơn và duy trì và sửa đổi chương trình của bạn trong tương lai. Tối thiểu, bạn sẽ cần các chức năng để lựa chọn tập dữ liệu (nghĩa là chỉ các khoảng thời gian đã "trôi qua" tại thời điểm kiểm tra lại), làm sạch và xác nhận (điều mà bạn thực sự phải suy nghĩ,

Câu hỏi của bạn về phát hiện và xử lý ngoại lệ cũng nằm trong hai mối quan tâm đó và tôi sẽ thực hiện bằng cách viết các vòng lặp nhỏ hơn trong vòng lặp chương trình chính của bạn để tiếp tục "làm sạch" và chỉnh sửa mô hình cho đến khi bạn đạt đến điểm mà bạn sẽ hài lòng nó (một lần nữa, bạn sẽ phải xác định chính mình).

Nếu điều này nghe có vẻ là một nhiệm vụ lớn, thì đó là vì nó là; mọi người đã viết toàn bộ thư viện phần mềm (đôi khi rất sinh lợi) để thực hiện loại nhiệm vụ này. Ngoài ra, thật khó để đưa ra bất kỳ lời khuyên cụ thể nào mà không biết thêm về các quy trình, cấu trúc dữ liệu và ngôn ngữ lập trình mà bạn đã thực hiện cho đến nay.

Nếu bất kỳ điều nào hữu ích cho bạn và bạn muốn tôi mở rộng về bất kỳ điều gì trong số đó, hãy bình luận, cho tôi biết và tôi sẽ hạnh phúc hơn khi làm điều đó.


Tôi không cần bất kỳ trợ giúp nào thực sự viết mã, cảm ơn - cơ sở hạ tầng kiểm tra của chúng tôi đã sẵn sàng và khá mạnh. Tôi chỉ quan tâm đến những gì thủ tục thống kê người ta có thể sử dụng. Liên quan đến tự động hóa một cách tự động phần tương tác của việc xây dựng mô hình: có điều gì được viết về điều này không? Tôi chưa thấy đề cập đến loại quy trình này trong tài liệu. Bạn đề cập đến "mọi người đã viết toàn bộ thư viện phần mềm" - bạn có tài liệu tham khảo nào không?
Ben Kuhn

@BenKuhn - Dựa trên nhận xét của bạn, tôi không rõ lắm về những khó khăn chính xác mà bạn gặp phải; xin vui lòng giúp tôi có được một chút rõ ràng hơn. Việc sử dụng phương pháp phỏng đoán trong xây dựng mô hình tự động khá phổ biến; ứng dụng cơ bản nhất mà tôi có thể nghĩ ra ngay bây giờ là hồi quy từng bước khiêm tốn. Thiếu chi tiết chính xác về mô hình của bạn, tôi không thể chỉ ra các mẩu văn học chính xác có thể giúp bạn, nhưng một tìm kiếm Google khó hiểu đưa ra một số bài viết khám phá các phương pháp để lựa chọn tham số tự động, đặc biệt là làm mịn và bị phạt. Xem bình luận tiếp theo của tôi cho một vài liên kết
habu


@BenKuhn - ý bạn là gì khi bạn nói các quy trình thống kê bạn có thể sử dụng? Theo suy nghĩ của tôi, backtest có thể được xử lý khá đơn giản bằng cách sử dụng lấy mẫu thử nghiệm tàu ​​hỏa với cửa sổ lựa chọn dữ liệu cuộn hoặc mở rộng. Tất cả dữ liệu bạn có được cho đến thời điểm backtest sẽ là tập huấn luyện của bạn, trong khi dữ liệu bạn dự kiến ​​sẽ thấy trong khoảng thời gian tiếp theo, trước khi bạn có cơ hội điều chỉnh lại mô hình của mình, sẽ là tập kiểm tra của bạn. Tất cả các biện pháp thông thường về hiệu suất dự đoán và mức độ phù hợp có thể được sử dụng để thực hiện đánh giá thực tế.
habu

@BenKuhn - Việc triển khai phần kiến ​​thức kinh doanh thực tế sẽ yêu cầu bạn mã hóa nó và đảm bảo rằng dữ liệu cần thiết để đưa ra các quyết định như vậy là có sẵn khi cần thiết. Ngoài ra, tôi sử dụng thuật ngữ "thư viện phần mềm" như một thuật ngữ bao trùm mọi thứ, từ các phần mở rộng đến các thư viện mô hình hiện có nhằm tự động hóa việc xây dựng mô hình cho các ứng dụng nhất định, cho đến các hệ thống hỗ trợ quyết định và chuyên gia độc quyền cấp công nghiệp.
habu

3

Thay vì cố gắng tìm ra cách tự động hóa các nỗ lực điều chỉnh mô hình thủ công của bạn, tôi sẽ cùng nhau giải quyết vấn đề đó bằng cách xem xét những người học phương sai thấp hơn yêu cầu điều chỉnh ít hơn nhiều, ngay cả khi đó là một chi phí tăng độ lệch mô hình. Bạn muốn tin tưởng vào kết quả backtest của mình, điều này phần lớn dẫn đến phương sai lấy mẫu thấp trong dự đoán của bạn và đưa ra một số quy trình điều chỉnh tự động trên đầu người học đã có phương sai lấy mẫu đang hoạt động chống lại mục tiêu đó. Có vẻ như cái đuôi đang vẫy con chó ở đây, nhưng bất cứ điều gì đòi hỏi phải điều chỉnh cẩn thận (thủ công hoặc tự động) không phải là một ứng cử viên tuyệt vời cho môi trường backtest thực sự trung thực IMO.


Tại sao điều chỉnh tự động (với một lần điều chỉnh riêng biệt tại mỗi thời điểm backtest) là "môi trường backtest thực sự trung thực"?
Ben Kuhn

Việc giảm phương sai bằng cách thả các spline sẽ dẫn đến sự mất mát không thể chấp nhận được trong khả năng dự đoán, thật không may. Đó có phải là những gì bạn đã nghĩ đến khi bạn đề nghị sử dụng một người học có phương sai thấp hơn? Nếu không, bạn đã nghĩ gì?
Ben Kuhn

@BenKuhn - Tôi chia sẻ những lo ngại của mình về việc liệu backtest có phải là một thử nghiệm thực sự "trung thực" về khả năng dự đoán ngoài mẫu của mô hình hay không, nếu không có lý do nào khác ngoài việc bạn đã phát triển các thông số điều chỉnh của mình trên toàn bộ dữ liệu có sẵn cho bạn; ngay cả khi bạn "quay ngược đồng hồ" và xây dựng lại mô hình của mình một cách linh hoạt, phương pháp mà bạn sẽ làm như vậy sẽ được phát triển bằng cách tham chiếu đến toàn bộ tập dữ liệu, do đó, rủi ro tồn tại là mô hình vẫn sẽ phù hợp, ngay cả khi nó là đào tạo lại về một tập hợp con của dữ liệu có sẵn.
habu

1
tt

1
Và trong một lĩnh vực ồn ào như tài chính, bạn muốn chắc chắn rằng nếu lịch sử đã mở ra một chút khác biệt (nhưng vẫn được rút ra từ một số phân phối cơ bản), bạn vẫn sẽ đến một mô hình tương tự. Nếu bạn tự tin rằng quy trình của bạn mạnh mẽ để lấy mẫu phương sai hơn tôi nghĩ bạn tốt. Nhưng theo kinh nghiệm của tôi, quy trình điều chỉnh tự động có thể rất nhạy cảm với phương sai lấy mẫu.
andrew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.