Tôi có một bộ dữ liệu mà tôi đang cố thực hiện hồi quy và thất bại.
Tình huống:
- Hàng ngàn người điều khiển robot chiến đấu đang chiến đấu với nhau bằng cách sử dụng robot chiến đấu.
- Một số robot chiến đấu mạnh mẽ và mạnh mẽ, và một số khác thì yếu; những kẻ mạnh thắng thường xuyên hơn và gây sát thương nhiều hơn.
- Người điều khiển robot khác nhau về kỹ năng, với những người giỏi hơn sẽ chiến thắng thường xuyên hơn và gây ra nhiều thiệt hại hơn
- Chúng tôi có một số thông tin tóm tắt về kết quả của các trận chiến của họ, nhưng không phải tất cả các chi tiết.
- Chúng tôi biết những robot chiến đấu mà họ đã sử dụng trong các trận chiến của họ và bao nhiêu lần (bao gồm bao nhiêu trong số những trận chiến mà họ đã thắng) và chúng tôi biết tổng thiệt hại mà họ đã gây ra (gồm hai loại, thiệt hạiA và thiệt hạiB)
- Một số robot tốt hơn trong việc gây sát thươngA, trong khi những người khác gây sát thươngB
- Đối với những người điều khiển robot chiến đấu không xác định chỉ dựa trên những robot họ đã sử dụng trong các trận chiến (và bao nhiêu lần), chúng tôi muốn ước tính mức độ thiệt hại của từng loại họ sẽ đạt được, và bao nhiêu% trận chiến mà họ có khả năng chiến thắng
Ví dụ:
- John đã sử dụng Robot A cho 4 trận chiến và Robot B cho 2 trận chiến và đã xử lý DamageA trị giá 240 đơn vị
- James đã sử dụng Robot A cho 1 trận chiến và Robot B trong 10 trận chiến và đã xử lý DamageA trị giá 1010 đơn vị
Do đó, tôi có thể ước tính rằng Robot A có thể gây ra 10 đơn vị sát thương A mỗi trận, trong khi Robot B gây ra 100 đơn vị sát thương A cho mỗi trận chiến, và do đó, nếu được yêu cầu ước tính Thiệt hại A do Matthew chỉ chơi mỗi một trong hai robot Mỗi trận có 2 trận, sẽ ước tính là 220 == (10 * 2 + 100 * 2).
Thật không may, dữ liệu thực không rõ ràng và đơn giản, có thể là do:
- Có một sự khác biệt đáng kể do kỹ năng điều khiển robot, ví dụ, một người vận hành tốt có thể gây ra 20 đơn vị thiệt hại với Robot A trong khi một người xấu chỉ có 5 đơn vị.
- Có một số phương sai ngẫu nhiên do các đối thủ rút ra trong trường hợp mẫu nhỏ (ví dụ: ai đó vẽ đối thủ mạnh và thua mặc dù có robot tốt hơn đối thủ), mặc dù cuối cùng nó cũng sẽ ra
- Có thể có một số sai lệch lựa chọn nhỏ trong đó các nhà điều hành robot tốt nhất quản lý để chọn các robot tốt nhất để tham gia vào trận chiến thường xuyên hơn
Tập dữ liệu thực có sẵn tại đây (630k mục kết quả của nhà điều hành trận chiến đã biết):
Tập dữ liệu được tổ chức như sau, với một mục nhập toán tử robot trên mỗi hàng:
- Cột 1 không có nhãn - ID nhà điều hành
- trận chiến - tổng số trận chiến mà nhà điều hành này đã tham gia
- chiến thắng - tổng số trận chiến mà nhà điều hành này đã giành chiến thắng
- đánh bại - tổng số trận chiến mà nhà điều hành này đã thua
- sát thươngA - Tổng sát thương A điểm gây ra
- sát thươngB - tổng điểm sát thương B gây ra
- 130 cặp cột như sau:
- trận chiến_ [robotID] - trận chiến sử dụng robot [robotID]
- victories_ [robotID] - chiến thắng đạt được bằng robot [robotID]
Những gì tôi đã làm cho đến nay:
- Đã thử một vài mô hình tuyến tính bằng cách sử dụng
biglm
gói R để xây dựng một công thức nhưdamageA ~ 0 + battles_1501 + battles_4201 + ...
cố gắng đạt được các giá trị "mong đợi" được trang bị cho mỗi robot. - Tương tự, nhưng loại bỏ chặn gốc bắt buộc bằng cách không bao gồm
0 +
trong công thức - Tương tự, nhưng cũng bao gồm các
victories_[robotID]
biến độc lập - Tương tự như trước đây, nhưng chỉ chọn những người điều khiển robot có số chiến thắng gần với số lần đánh bại của họ
- Một mô hình hồi quy tuyến tính cho
damageA ~ 0 + battles_1501 + battles_non_1501
nơibattles_non_1501
là tất cả các trận đánh trong robot khác ngoài mô hình Robot 1501. Sau đó lặp đi lặp lại cho tất cả các loại robot khác.
Tôi đã kiểm tra sự tỉnh táo bằng cách xem xét các giá trị sát thương và sát thương dự đoán, cũng như so sánh tỷ lệ chiến thắng / trận chiến với tỷ lệ chiến thắng / trận chiến thực tế mà chúng ta thực sự có thể tính toán chính xác cho từng robot.
Trong mọi trường hợp trong khi kết quả không hoàn toàn tắt, họ đã đủ để thấy rằng mô hình không hoạt động tốt. Ví dụ, một số robot đạt được số lượng sát thương âm không thực sự xảy ra vì bạn không thể gây sát thương tiêu cực trong trận chiến.
Trong trường hợp tôi cũng sử dụng các victories_[robotID]
giá trị đã biết trong công thức, nhiều battle_[robotID]
hệ số cuối cùng có số âm lớn, vì vậy tôi đã thử ước tính cho toán tử "trung bình" battle_[robotID] + victories_[robotID] / 2
nhưng điều đó cũng không cho kết quả hợp lý.
Bây giờ tôi đã hết ý tưởng.
lme
thay vì của tôi biglm
, nhưng rõ ràng tôi cần đọc nhiều hơn về điều này để hiểu chính xác những gì cần cung cấp như là tham số cho nó.