데이터 유출안녕
테스트 그룹과 교육 그룹 간의 데이터 유출에 대한 여러 게시물을 읽었습니다. 누출을 방지하기위한 일반적인 제안 :
1 정규화, 표준화 및 결 측값 대치 전에 학습 및 테스트 세트에서 데이터베이스를 분할합니다.
2 시계열의 경우 무작위 분할을 피하십시오. 시간 컷 포인트를 결정하고이를 사용하여 교육 및 테스트 세트를 분리합니다.
어떤 의견, 제안, 유용한 독서?
Felice
해석학Re : 데이터 유출내 2 센트 :
시계열 데이터가 있다면 많은 보간을하지 않는 한 항목 2가 더 큰 문제라고 생각하는 경향이 있습니다.데이터의 노이즈 소스를 고려하십시오. 이러한 노이즈가 여러 행에 걸쳐 발생하거나 행이 전후 행에 연결되어 있는지 여부 (시간이 지남에 따라 탱크 수준을 모니터링하는 데 탱크가 도달하는 데 2 개 이상의 행이 걸리는 경우) 예를 들어 새로운 정상 상태) 데이터를 행별로 분할 할 수 없으며 검증 또는 테스트 세트가 훈련과 독립적 일 것으로 기대할 수 없습니다.
대신 데이터를 더 큰 청크로 테스트 및 검증으로 분할하는 것을 고려할 수 있습니다. 예를 들면 다음과 같습니다.
- 프로세스가 '중요한'변화를 일으키는 새로운 기간을 식별하고 동일한 그룹에서 안정된 상태 실행 기간을 유지합니다 (더 어렵지만 더 좋음).
- 서로 다른 실행 조건을 나타낸다고 확신 할 수있을만큼 충분히 긴 기간을 사용하지만 둘 이상의 실행 조건으로 구성되지 않을만큼 충분히 짧고 동일한 유효성 검사 그룹에서 해당 기간의 모든 행을 유지합니다 (더 쉽게, 잠재적으로 동일한 위험에 노출 될 수 있음). )
- 위에서 식별 된 기간을 사용하여 변수의 평균 또는 표준 편차 또는 다른 기능의 데이터 탐색기를 사용하여 각 실행을 단일 행에 요약합니다. (베스트)
두 경우 모두 그룹 간의 전환 기간 제외를 고려할 수 있습니다.
내 개인적인 경험 : 이러한 방법 중 하나 이상을 사용하기 시작했기 때문에 검증 및 테스트 그룹 통계는 모델의 예측력에 대한 훨씬 더 합리적인 기대치를 나타냅니다.
Re : 데이터 유출여기 내 제한된 경험이 있습니다.
모델링은 매우 복잡합니다 (올바른 모델 선택, 데이터 준비, 데이터 분할, 메타 데이터 튜닝 ...).
좋은 robost 모델은 분할, 메타 데이터, 모델 유형과 독립적입니다.
교육 및 테스트 세트 모두 프로세스를 대표해야하지만 테스트 세트가 포괄적 일 필요는 없습니다. 결과를 판단하려면 교육 / 테스트가 필요합니다. @ih 이미 언급했습니다.
분할의 경우 계층화 옵션을 사용하여 분할을 제어 할 수 있습니다. 그러나 모델링과 분할 모두를 위해 최선을 다하는 방법을 알고있는 프로세스가 필요합니다.
복잡한 모델의 경우 결과가 중요 할 때 다른 모델, 다른 메타 데이터 및 다른 유효성 검사 열을 테스트하려고했습니다. 큰 차이가 없으면 문제가 없습니다. 그리고 이것은 JMP (Pro)에서 수행하기 매우 쉽습니다.
결국이 테스트 만이 누수가 없는지에 대한 답을 제공합니다. 하지만 솔직히, 좋은 모델이 있다고 확신 할 수 있다면 유출은 신경 쓰지 않을 것입니다.
Re : 데이터 유출누출과 과적 합이라는 두 가지를 혼동하고 있는지 궁금합니다.나는 그것들이 상당히 다르다고 생각합니다.과적 합은 항상 예측 모델링에서 잠재적 인 문제이며이를 방지하는 일반적인 방법은 유효성 검사를 수행하고 충분한 데이터가있는 경우 별도의 테스트 데이터 세트를 사용하는 것입니다.내 경험에 비추어 볼 때, 다른 많은 튜닝 매개 변수도이를 방지하는 데 도움이되기 때문에 과적 합은 JMP에서 다른 문제보다 덜 문제가됩니다.예를 들어 의사 결정 트리에서 상대적으로 높은 최소 분할 크기를 설정하면 과적 합을 방지하는 데 도움이됩니다.하지만 모델이 새 데이터에 대한 현실적인 예측을 생성 할 수 있는지 평가하기 위해 별도의 테스트 데이터를 갖는 것이 좋습니다.시계열 데이터에 특히 중요하다고 생각합니다.
누수는 제 생각에 완전히 다른 문제입니다.누설은 잘못 지정된 모델입니다.당신은 당신이 예측하려는 것과 동시에 알려진 요인들을 사용하고 있습니다.예를 들어, 고객 유지를 예측하려고하는데 요소 중 하나가 올해 구매 인 경우 유지 된 고객에 대한 데이터 만 있고 유지하지 않는 고객에 대한 데이터는 누락됩니다.이 경우 올해 구매 요인은 고객 유지를 완벽하게 예측하지만 유용한 모델은 아닙니다.그것이 누출이라고 생각하는 것입니다.
다른 훈련 / 검증 / 테스트 데이터 세트를 사용하여 누출을 방지하거나 감지하지 않는다고 생각합니다.이러한 3 가지 중 하나에서 누출을 감지 할 수 있습니다. 훈련 데이터에 대한 완벽한 모델 (또는 거의 그 이상)이면 누출이있을 수 있다고 의심 할 수 있습니다.누출을 방지하는 가장 좋은 방법은 요인을 신중하게 고려하고 측정 방법과시기를 이해하는 것입니다.모델이 너무 좋아서 사실이 아니라면 누출 때문일 수 있습니다 (또는 아주 좋은 모델 일 수 있음).그러나 나는 그것이 어떤 기술적 장치에서 대답하는 질문이라고 생각하지 않습니다.
나는 이것에 대해 다른 사람들이 말하는 것을 듣고 싶습니다.
Re : 데이터 유출소중한 헉헉 , 예, 맞습니다. 적어도 공식적으로는 전체 목표에 대해 생각했듯이 훌륭하고 견고한 모델을 갖기 위해 그것을 혼합했습니다. 누출 방지는 테스트 세트에서 이미 데이터를 본 것이 아니라 목표로 정의됩니다. 여기에 몇 가지 추가 설명이 있습니다.
머신 러닝의 데이터 유출. 문제를 방지하는 방법… | 작성자 Devin Soni:crown:| 데이터 과학을 향하여
그러나 일반적으로 훈련 세트와 테스트 세트를 무작위로 나눌 때 의도적으로 어떻게할까요? 프로세스 모델 범주에서 훈련과 테스트 세트는 모두 동일한 프로세스에서 나온다고 생각합니다. 예측에 대해 생각할 때 다를 수 있습니다.
Re : 데이터 유출링크 한 기사는 데이터 유출에 대해 매우 혼란 스럽습니다.학습 및 검증 / 테스트 데이터 (과적 합)에 대한 차등 성능 개념과 학습 데이터와 테스트 데이터 (누출을 생각하는 한 가지 방법) 사이에 명확한 경계가없는 개념을 혼합하고 있습니다.두 가지 개념은 구별됩니다.모델이 테스트 데이터가 아닌 훈련 데이터에 적합하면 과적 합의 예입니다.누출은이를 설명하지 않습니다. 실제로 누출이있는 경우 학습 데이터에도 나타납니다.또한 테스트 데이터가 무작위로 선택되면 테스트 데이터에있을 때마다 훈련 데이터에서 누출이 발생해야합니다 (반대의 경우도 마찬가지).응답을 예측하는 데 사용되지만 예측이 이루어질 때 알 수없는 정보 기능이 데이터에 포함되어 있기 때문입니다.
테스트 데이터가 전체 데이터 세트의 무작위 선택이 아니기 때문에 시계열 데이터의 경우 상황이 약간 덜 명확합니다 (임의의 시간 일 수 있음). 기간 ).대부분의 시계열 모델은 과거 데이터를 사용하여 미래를 예측합니다. 나중에 데이터를 사용하여 이전 데이터를 예측하면 누출이 발생합니다.과적 합은 모델을 구축하는 데 사용되는 기간의 하위 집합을 예측하기 위해 기간을 사용하는 것입니다. 즉, 기간을 별도로 유지하지 않습니다.시계열 모델에서 과적 합 및 누출을 피하더라도 모델을 작성하는 데 사용 된 기간이 예측하려는 기간과 충분히 유사하다는 가정이 있습니다.기간이 비슷하지 않은 경우 (예 : 힘이 변경되어 모델이 더 이상 관련이없는 경우) 모델이 그다지 좋지 않다고 말할 수 있지만 누출이라고 부르지 않고 과적 합이라고도하지 않을 것입니다.
Re : 데이터 유출안녕 @ FR60 ,
당신이 제기하는 구체적인 요점에 대한 나의 생각 :
1. 데이터를 표준화 및 / 또는 정규화하려는 경우 데이터 세트를 분할하기 전에 수행하는 것이 가장 좋습니다. 결 측값 대치에 대해서는주의해야합니다. 때로는 누락 된 데이터가 유익한 경우도 있고 그렇지 않은 경우도 있습니다. 또한 JMP가 값을 대치하는 방식은 특정 데이터에 적합하지 않을 수 있습니다. 누락 된 데이터를 잘못 대치하고 데이터에 인위적인 동작을 도입하여 모델에 잘못 영향을 미칠 수 있습니다.
2. 시계열의 경우 실제로 시계열을 사용하여 미래의 이벤트를 예측하고 예측하는 경우 데이터 집합을 분할하지 않을 것입니다. 적어도 JMP의 시계열 플랫폼에서는 그렇지 않습니다. , 해당 플랫폼에는 유효성 검사 열이 없습니다. 그러나 미래의 미사용 데이터에 가장 적합한 데이터를 확인하기 위해 서로 다른 예측 모델을 비교하는 독립적 인 데이터 세트를 갖고 싶다면 예, 어느 시점에서 데이터 세트를 분할하고이를 사용하여 예측 모델을 생성하고 저장합니다. 이러한 공식을 데이터 테이블에 추가하고 사용하지 않는 데이터를 얼마나 잘 예측하는지 확인합니다. 간단한 Fit Y by X를 사용하고 R ^ 2 값을보고 어떤 모델이 결과를 가장 잘 예측하는지 확인하거나 실제 데이터와 모델링 된 데이터 사이의 잔차를보고 어떤 것이 가장 작은 잔차 합계를 갖는지 확인합니다. .
일반적으로 제가하는 일은 80/20 데이터 테이블을 훈련 및 테스트 데이터 세트로 분할하는 것입니다. 그런 다음 테스트 데이터를 완전히 다른 데이터 테이블로 분리하여 빌드 한 모델이 테스트 데이터를 사용할 기회가 없도록합니다. 이것은 단순히 데이터를 "숨기기"및 "제외"하는 것 이상이며 실수로 테스트 데이터를 사용하는 알고리즘의 가능성을 제거합니다. "training"세트 데이터 테이블을 사용하여 유효성 검사 열을 만들거나 플랫폼의 유효성 검사 부분 옵션을 사용하여 과적 합을 줄이기 위해 다시 80/20을 교육 / 검증으로 분할합니다. 플랫폼이 다른 여러 모델을 생성 한 후 테스트 데이터 세트를 사용하여 어떤 모델이 미사용 / 보이지 않는 데이터를 가장 잘 예측하는지 확인합니다.
도움이 되었기를 바랍니다,
DS
Re : 데이터 유출나는 Kaggle에서이 튜토리얼이 매우 흥미 롭다는 것을 발견했습니다.
학습 및 테스트 세트에서 데이터를 분할하기 전에 누락 된 값의 정규화 및 대치를 데이터에 적용하지 않도록 다시 강조합니다.
https://www.kaggle.com/alexisbcook/data-leakage
챠오 펠리체