머신 러닝에서 계층 적 / 중첩 된 데이터를 처리하는 방법


29

예를 들어 내 문제를 설명하겠습니다. {나이, 성별, 국가, 지역, 도시}와 같은 속성이 주어진 개인의 소득을 예측한다고 가정합니다. 당신은 이와 같은 훈련 데이터 세트를 가지고 있습니다

train <- data.frame(CountryID=c(1,1,1,1, 2,2,2,2, 3,3,3,3), 
             RegionID=c(1,1,1,2, 3,3,4,4, 5,5,5,5), 
             CityID=c(1,1,2,3, 4,5,6,6, 7,7,7,8), 
             Age=c(23,48,62,63, 25,41,45,19, 37,41,31,50), 
             Gender=factor(c("M","F","M","F", "M","F","M","F", "F","F","F","M")),
             Income=c(31,42,71,65, 50,51,101,38, 47,50,55,23))
train
   CountryID RegionID CityID Age Gender Income
1          1        1      1  23      M     31
2          1        1      1  48      F     42
3          1        1      2  62      M     71
4          1        2      3  63      F     65
5          2        3      4  25      M     50
6          2        3      5  41      F     51
7          2        4      6  45      M    101
8          2        4      6  19      F     38
9          3        5      7  37      F     47
10         3        5      7  41      F     50
11         3        5      7  31      F     55
12         3        5      8  50      M     23

이제 City 7에 사는 새로운 사람의 소득을 예측하고 싶다고 가정 해 봅시다. 제 훈련 세트는 City 7에있는 사람들과 함께 무려 3 개의 샘플을 가지고 있습니다. 이 새로운 개인의 소득을 예측하십시오.

이제 City 2에 사는 새로운 사람의 소득을 예측하려고한다고 가정하겠습니다. 내 훈련 세트에는 City 2의 표본이 하나만 있으므로 City 2의 평균 수입은 신뢰할 수있는 예측 변수가 아닐 수 있습니다. 그러나 아마도 지역 1의 평균 수입을 사용할 수 있습니다.

이 아이디어를 약간 외삽하면 훈련 데이터 세트를

    Age Gender CountrySamples CountryIncome RegionSamples RegionIncome CitySamples CityIncome
 1:  23      M              4         52.25             3        48.00           2    36.5000
 2:  48      F              4         52.25             3        48.00           2    36.5000
 3:  62      M              4         52.25             3        48.00           1    71.0000
 4:  63      F              4         52.25             1        65.00           1    65.0000
 5:  25      M              4         60.00             2        50.50           1    50.0000
 6:  41      F              4         60.00             2        50.50           1    51.0000
 7:  45      M              4         60.00             2        69.50           2    69.5000
 8:  19      F              4         60.00             2        69.50           2    69.5000
 9:  37      F              4         43.75             4        43.75           3    50.6667
10:  41      F              4         43.75             4        43.75           3    50.6667
11:  31      F              4         43.75             4        43.75           3    50.6667
12:  50      M              4         43.75             4        43.75           1    23.0000

따라서 목표는 평균 CityIncome, RegionIncome 및 CountryIncome을 어떻게 결합하여 각 값에 대한 가중치 / 신뢰성을주기 위해 각 훈련 샘플 수를 사용하는 것입니다. (아직도 여전히 연령과 성별의 정보를 포함합니다.)

이 유형의 문제를 해결하기위한 팁은 무엇입니까? 랜덤 포레스트 또는 그라디언트 부스팅과 같은 트리 기반 모델을 사용하는 것이 더 좋지만 제대로 작동하지 못했습니다.

최신 정보

이 문제에 기꺼이 응하려는 사람은 여기에서 제안 된 솔루션을 테스트하기 위해 샘플 데이터를 생성 했습니다 .


7
계층 적 베이지안 모델은 데이터에 설명 된대로 구조를 이용하는 데 매우 자연 스럽습니다. 라돈 오염 모델링에 대한 고전적인 예를 확인하십시오 mc-stan.org/documentation/case-studies/radon.html
— Vladislavs Dovgalecs

이 Kaggle 시작하기 튜토리얼 도전을 살펴보세요 kaggle.com/c/titanic을 . 성별, 티켓 유형 등과 같은 사람에 대한 다양한 속성을 고려하여 타이타닉 재난에서 살아남 았는지 예측하는 비슷한 문제를 다루고 있습니다. 등
— Vihari Piratla

6
@VihariPiratla 의견을 보내 주셔서 감사합니다.하지만 타이타닉 데이터 셋과 챌린지에 익숙하며, 내가 요청한 중첩 데이터 문제와 어떻게 관련이 있는지 알 수 없습니다.
— Ben

로지스틱 회귀 / SVM과 같은 모델에 L2 / L1 정규화를 사용하면 도움이됩니다 (가난한 계층 적 베이). 효과적으로 계수에 불이익을 주므로 계수가 현저하게 (즉, 많은 데이터에서) 오류를 개선하지 않는 한 0에 가깝게 설정됩니다. 그리고 교차 검증을 통해 처벌 수준을 결정합니다
— seanv507

9 번 도시에 사는 사람의 소득을 예측하고 싶습니까?
— jan-glx

답변:


14

이 사이트에 대한 다음 질문에서 영감을 얻어이 문제에 대해 잠시 생각하고 있습니다.

먼저 계층 적 / 중첩 데이터에 대한 혼합 효과 모델을 소개하고 간단한 2 단계 모델 (도시 내에 중첩 된 샘플)에서 시작하겠습니다. 들어 j 번째의 샘플 나는 번째시, 우리는 결과 물품 와이나는j 공변량의 함수로서의 엑스나는j (성별, 연령 등의 변수들의리스트)를

와이나는j=에프(엑스나는j)+유나는+ϵ나는j,
여기서 유나는 는 각 도시의 랜덤 차단입니다. . 우리가 가정한다면 U에게 난을 하고 ε I J 평균 0 정규 분포를 따라 편차를 σ 2 U를 과 σ 2 의 경험적 베이지안 (EB)를 추정 u는 I 이다 유 I = σ 2 Uj=1,…,엔나는유나는ϵ나는jσ유2σ2유나는 ˉ Y 난. =1
유^나는=σ유2σ유2+σ2/엔나는(와이¯나는.−에프(엑스¯나는.)),
,f( ˉ x i.)=1와이¯나는.=1엔나는∑나는엔나는와이나는j우리가 취급하는 경우( ˉ Y 난.-F는( ˉ X I.))OLS (통상 최소 제곱)의 추정값으로서U가난가중치는 다음 EB 추정치는 0의 가중 합이되고 OLS가 추정 및 샘플 크기의 함수 증가ni. 최종 예측은 f를 (XIJ)+ U I에프(엑스¯나는.)=1엔나는∑나는엔나는에프(엑스나는j).(와이¯나는.−에프(엑스¯나는.))유나는엔나는F ( X I J는 ) 선형 회귀 또는 랜덤 포레스트 같은 기계 학습 방법에서 고정 효과의 추정치이다. 이는 도시, 지역, 국가에 중첩 된 샘플과 같이 모든 수준의 데이터로 쉽게 확장 할 수 있습니다. 트리 기반 방법 외에SVM기반 방법이있습니다.
에프^(엑스나는j)+유^나는,
에프^(엑스나는j)

임의 포리스트 기반 방법의 경우 CRAN MixRF()의 R 패키지 MixRF를 사용해 볼 수 있습니다 .


나는에프나는

에프유나는엑스나는j'유나는,

6

두 개의 변수와 간단한 중첩 만 있다고 가정하면 계층 적 베이 즈 모델을 언급하는 다른 사람들의 의견을 에코합니다. 트리 기반 메소드에 대한 선호도를 언급했지만 특별한 이유가 있습니까? 최소한의 예측 변수를 사용하면 선형성이 종종 잘 작동하는 유효한 가정이며 모든 모델 잘못 지정은 잔차 그림을 통해 쉽게 확인할 수 있습니다.

많은 예측 변수가있는 경우 @Randel이 언급 한 EM 접근 방식을 기반으로하는 RF 예제는 확실히 선택 사항입니다. 내가 아직 보지 못한 또 다른 옵션은 모델 기반 부스팅을 사용하는 것입니다 ( R 의 mboost 패키지를 통해 사용 가능 ). 기본적으로이 방법을 사용하면 다양한 기본 학습자 (선형 및 비선형)를 사용하여 고정 효과의 기능적 형태를 추정 할 수 있으며, 임의의 효과 추정치는 해당 특정 요인의 모든 수준에 대해 능선 기반 페널티를 사용하여 근사됩니다. 이 백서는 매우 훌륭한 튜토리얼입니다 (랜덤 효과 기반 학습자는 11 페이지에서 설명합니다).

샘플 데이터를 살펴 보았지만 도시, 지역 및 국가의 랜덤 효과 변수 만있는 것처럼 보입니다. 이 경우 예측 변수와 상관없이 해당 요인에 대한 경험적 베이 추정치를 계산하는 것이 유용합니다. 높은 수준 (예 : 국가)에서 결과에 설명 된 편차가 최소이므로 일반적으로 시작하는 것이 좋습니다. 따라서 모델에 추가하는 것이 좋습니다.


1
mboost패키지 소개 +1
— Randel

내가 작업하고 있는 실제 데이터에는 두 가지 이상의 변수가있어 간단한 예제 (예 : 비 선형성, 코드 종속, 결측 값, 범주 값 등)로 선택되지 않는 많은 실제 혼란을 추가합니다. . 내 경험상 트리 기반 학습자는 모든 실제 혼란을 처리하는 데 최선을 다합니다. (XGBoost가 Kaggle에서 거의 모든 구조화 된 데이터 경쟁에서이기는 이유가 있습니다.) mboost흥미롭게 들립니다. 감사합니다
— Ben

1
나는 그 상황에서 나무가 확실히 유용 할 수 있다는 데 동의했다. 이 경우 @Randel의 제안을 고수하는 것이 좋습니다. Mboost에는 또한 나무 기반 학습자가 있으며이 효과는 임의 효과 기본 학습자와 함께 유용하게 사용될 수 있습니다.
— dmartin

3

이것은 답변이 아니라 의견이나 제안에 가깝지만 여기서 중요한 질문을한다고 생각합니다. 다단계 데이터로 독점적으로 일하는 사람으로서, 다단계 데이터로 기계 학습에 대해 거의 발견하지 못했다고 말할 수 있습니다. 그러나 최근 버지니아 대학교 (University of Virginia)의 정량 심리학 박사 학위를받은 Dan Martin은 다단계 데이터와 함께 회귀 트리 사용에 대한 논문을 발표했습니다. 아래는 이러한 목적 중 일부를 위해 작성한 R 패키지의 링크입니다.

https://github.com/dpmartin42/mleda/blob/master/README.md

또한, 그의 논문을 찾을 수 있습니다 :

http://dpmartin42.github.io/about.html


2
참조 주셔서 감사합니다, Erik! 내 논문에서 명심해야 할 한 가지는 다중 수준 데이터 구조에 노출 될 때 포리스트 메서드가 "즉시"수행되는 방식 만 평가한다는 것입니다. @Randel이 언급 한 방법은 3 장에서 문헌 검토로 논의되었지만 시뮬레이션 연구는 주로 Breiman의 원래 알고리즘과 조건부 추론 트리 / 포리스트를 조사했습니다.
— dmartin

1

RFcluster()R에 대한 gamclass 패키지 의 기능 은 "임의적이고 비효율적이지만 임의의 포리스트가 클러스터 된 범주 형 결과 데이터와 함께 작동하도록 조정합니다". 다음은 도움말 페이지의 예입니다 RFcluster.

 library(randomForest)
 library(gamclass)
 data(mlbench::Vowel)
 RFcluster(formula=Class ~., id = V1, data = Vowel, nfold = 15,
           tree=500, progress=TRUE, printit = TRUE, seed = 29)

이것은 내 기계가 0.57로 제공하는 OOB 정확도 ( "백"이 개별 스피커 샘플의 백이 아닌 스피커 백입니다)를 반환합니다.


0

당신은 한 번 봐 가지고 할 수 있습니다 metboost 밀러 PJ 등을 :. metboost : 계층 적으로 클러스터 된 데이터를 사용한 탐색 적 회귀 분석.

요약 : 우리는 계층 적으로 클러스터 된 데이터를 위해 metboost라는 강화 된 의사 결정 의사 결정 트리의 확장을 제안합니다. 각 트리의 구조를 그룹 전체에서 동일하게 제한하지만 터미널 노드 수단이 다를 수 있습니다. 이를 통해 예측 자와 분할 지점이 각 그룹 내에서 다른 예측으로 이어지고 비선형 그룹 별 효과와 유사합니다. 중요하게도 metboost는 결 측값을 포함 할 수있는 수천 개의 관측치 및 수백 개의 예측 변수에 대해 계산 가능한 것으로 남아 있습니다.

R 패키지 mvtboost 에서 구현됩니다.


1
링크가 죽을 수 있으므로 링크 (특히 첫 번째 링크) 대신 참조를 제공하십시오.
— Antoine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.