랜덤 포레스트 모델에서 최신 데이터 가중치 부여


14

6 가지 범주를 구분하기 위해 Random Forest로 분류 모델을 훈련하고 있습니다. 내 거래 데이터에는 약 60k 이상의 관측치와 35 개의 변수가 있습니다. 다음은 대략 어떻게 보이는지에 대한 예입니다.

 _________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay  |
|-------|----------------|-------|-------|--------|
|111    | 2013-04-01     | 12    | US    | group1 |
|222    | 2013-04-12     | 6     | PNG   | group1 |
|333    | 2013-05-05     | 30    | DE    | group2 |
|444    | 2013-05-10     | 78    | US    | group3 |
|555    | 2013-06-15     | 15    | BR    | group1 |
|666    | 2013-06-15     | 237   | FR    | group6 |

모델이 생성되면 지난 몇 주 동안의 관측치에 점수를 매기고 싶습니다. 시스템에 변화가 생겼을 때, 더 최근의 관측치가 내가 예측하고 싶은 현재 관측치의 환경과 더 유사 할 것입니다. 따라서 랜덤 포레스트가 최근 관측에 더 중요하게 가중되도록 가중치 변수를 만들고 싶습니다.

R의 randomForest 패키지가 관측 당 가중치를 처리 할 수 ​​있는지 아는 사람이 있습니까?

또한 가중치 변수를 만드는 좋은 방법이 무엇인지 제안 해 주시겠습니까? 예를 들어 내 데이터가 2013 년 데이터이므로 날짜의 월 번호를 가중치로 사용할 수 있다고 생각했습니다. 누구 든지이 방법에 문제가 있습니까?

미리 감사드립니다!


스택 오버플로에 질문을 게시하는 것을 고려할 수 있습니다. 그것들은 구현 문제에 더 도움이 될 것입니다. 이 사이트의 초점은 이론을 기반으로합니다.
Alex Williams

필자는 글로 충분히 명확하지 않지만 구현 문제와 관련된 질문은 아닙니다. 예를 들어, 가중치 변수를 만드는 것에 대해 묻는 부분에서 R의 명령으로 도움을 줄 수있는 것은 아닙니다. 나는 그로 인해 임의의 숲의 가정을 위반하는지 궁금합니다.
Nikolay Nenov

1
대답은 '아니요'입니다. 아래 답변에서 설명한대로 가중치를 다른 그룹에 할당 할 수 있습니다. 나는 이것이 당신이 관심있는 것이 아니라는 것을 이해하지만 비슷한 생각입니다. 내가 제안한대로 중복 관찰을 사용해 볼 수 있습니다.
Alex Williams

답변:


5

rangerR (의 패키지 PDF 비교적 새로운),이 작업을 수행 할 것입니다. 랜덤 포레스트의 레인저 구현에는 case.weights개별 사례 / 관측 가중치를 가진 벡터를 취하는 인수가 있습니다.


산뜻한! 내가 찾고있는 솔루션과 같은 솔기가 있습니다. 확률 계산 case.weights의 세부 사항에 대한 링크가 있습니까?
Nikolay Nenov 2016 년

1
나는 그들이 확률을 어떻게 계산하는지 100 % 확신하지 못합니다. 그러나 시작을 원한다면 Malley, JD, Kruppa, J., Dasgupta, A., Malley, KG 및 Ziegler와 같은 논문을 살펴보십시오. , A. (2012). 확률 머신 : 비모수 적 학습 머신을 사용한 일관된 확률 추정. 메드 51 : 74-81의 방법. dx.doi.org/10.3414/ME00-01-0052
GrantRWHumphries 님이

7

최신 데이터 포인트를 과도하게 나타내도록 데이터를 리샘플링 할 수 있습니다. Rf는 대체와 함께 sampel-with-relacment 단계를 포함하며 불균형 클래스의 "대략 균형 잡힌 배깅"은 샘플링을 사용하여 소수 클래스를 과도하게 표현하고 내 경험에서 클래스 가중치 임의 포리스트보다 우수하거나 더 나은 결과를 생성합니다.

배깅 중에 대신 훈련 매트릭스 ( reference ) 를 구성하는 수준에서 리샘플링하여 구현을 쉽게 유지하기 위해 그 경우에 많은 반복을 수행하는 것이 좋습니다.

내부적으로 scikit-learn을 포함한 임의 포리스트의 일부 구현은 실제로 샘플 가중치를 사용하여 각 샘플의 백 수를 추적하며, 이는 교차 검증의 오버 샘플링과 교차 검증의 오버 샘플링과 비슷해야합니다.


4

"classwt"매개 변수를 조사해야합니다. 이것은 당신이 직접 관심이있는 것 같지는 않지만, 당신이 하고 싶은 것에 대한 감각을 줄 수 있습니다 .

여기를보십시오 : 스택 교환 질문 # 1

그리고 여기에 : 스택 교환 질문 # 2

가중 무작위 숲에 대한 기사 : PDF

기본 개념은 드물게 관찰 된 그룹 / 분류가 부트 스트랩 샘플에서 선택 될 가능성이 더 높은 클래스에 가중치를 부여하는 것입니다. 불균형 데이터에 도움이됩니다 (다른 클래스의 사전 확률이 크게 다른 경우).

비슷한 일을하고 싶지만 최근의 사건 (특정 그룹 / 분류가 아닌)을 원한다고 생각합니다. 이 작업을 수행하는 간단한 방법은 더 최근의 관측치에 대해 중복 관측치를 작성하는 것입니다 (즉, 반복 된 동일한 행에 배치). 그러나 이것은 잠재적으로 비효율적 일 수 있습니다. R에서 각 관측 값에 직접 가중치를 부여하는 방법은 알지 못하지만 알 수 없습니다.

예를 들어 C와 같은 대체 구현을 둘러 볼 수 있습니다. 최악의 경우 약간의 코딩으로 사용자 정의 할 수 있습니다.


1
링크 주셔서 감사합니다, 알렉스. 이 논문은 분류기에 가중치를 부여하고자하는 경우에 대한 좋은 예를 제공합니다. 분류자가 가중치를 부여하는 것 외에는 "classwt"매개 변수를 사용할 수 없으므로 클래스 당 하나의 가중치가 필요합니다. 그렇지 않으면 randomForest가 오류를 반환합니다.
Nikolay Nenov

1
네, "classwt"를 직접 사용할 수 있다고 생각하지 않습니다. "observationweights"와 같은 매개 변수를 원하지만 존재하지 않는 것 같습니다.
Alex Williams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.