데이터 유출안녕
테스트 그룹과 교육 그룹 간의 데이터 유출에 관한 여러 게시물을 읽었습니다. 누출을 방지하기 위한 일반적인 제안:
1 정규화, 표준화 및 결측값 대치 전에 훈련 및 테스트 세트의 데이터베이스를 분할합니다.
2 시계열의 경우 무작위 분할을 피하십시오. 시간 구분 지점을 결정하고 이를 사용하여 훈련 세트와 테스트 세트를 분리합니다.
의견, 제안, 유용한 자료가 있으신가요?
펠리체
데이터 혼합 및 정리답: 데이터 유출안녕 @FR60 ,
안타깝게도 JMP가 모든 플랫폼이나 모든 상황에서 그렇게 작동하는지 확인할 수는 없습니다.
저는 JMP의 여러 모델링 플랫폼에서 추정 보고서를 받을 때 확장된 추정에 대한 보고서가 있는 경우가 많다는 것을 알고 있습니다. Fit Y by X 플랫폼에서도 이를 확인할 수 있습니다. 여기에서 선이나 다항식 또는 기타 함수를 데이터에 맞추면 JMP는 적합 함수를 중심으로 하는 공식을 반환합니다. 따라서 적합치가 y=a*x+b*x^2 +c인 경우 JMP가 반환하는 함수는 실제로 y=a*(x-x0)+b*(x-x1)^2+c입니다. 여기서 x0 x1은 상수입니다. 명시적으로 하지 말라고 지시하지 않는 한 이 작업을 수행합니다.
JMP가 이런 방식으로 작업을 수행하는 것으로 알고 있습니다. 왜냐하면 a, b, c에 대한 추정값은 데이터를 중앙에 위치시킬 때보다 중앙에 위치할 때 더 정확하기 때문입니다. JMP가 모든 플랫폼에 대해 이 작업을 수행한다면 놀라지 않을 것입니다. 하지만 잘 모르겠습니다. DOE를 생성할 때 모든 데이터를 인코딩하므로 실제 값을 입력하더라도 프로그램 백엔드에서 DOE의 낮음, 중간, 높음 설정에 -1, 0, 1과 같은 인코딩된 값을 사용합니다. . 실제로 입력할 수 있는 실수는 사용되지 않습니다.
해당 주제에 대해 완전한 확인을 받으려면 JMP 직원에게 직접 편지를 보내거나 해당 지역을 지원하는 시스템 엔지니어와 대화하겠습니다. 이것이 플랫폼에 따른 것인지 아니면 JMP를 통해 전반적으로 수행되는지 아는 것이 좋을 것입니다.
감사해요!,
DS
답: 데이터 유출안녕하세요 디드리치
귀하의 의견에 진심으로 감사드립니다.
훈련-테스트 누출에 대해 여러 블로그에서 보고된 제안은 데이터 전처리를 수행하기 전에 데이터를 분할하는 것입니다. 예를 들어 모든 예측 변수를 0과 1 사이로 정규화하려면 데이터를 분할하기 전에 훈련 데이터만 사용하여 최소/최대를 계산한 다음 해당 값으로 검증 및 테스트 데이터도 정규화해야 합니다. z-표준화 또는 결측값 대치와 같은 다른 유사한 유형의 데이터 관리에 대해서도 마찬가지입니다. 물론 교차 검증을 사용하는 경우 위에 보고된 동일한 방법론에 따라 더 복잡한 계산을 구현해야 합니다.
이제 질문으로 넘어가겠습니다. 귀하의 메일에는 다음과 같이 기재했습니다.
" 이제 분할 후 데이터를 표준화/정규화하는 것이 왜 중요한지 알 수 있습니다. JMP는 일반적으로 계산 중에 뒤에서 이 작업을 수행한 다음 보고서를 작성할 때 크기를 다시 조정하는 것으로 알고 있습니다. "
이는 JMP를 사용하면 훈련-테스트 누출에 대해 걱정할 필요가 없다는 것을 의미합니다. jmp 알고리즘이 내부적으로 이를 방지하기 때문입니다.
그렇다면 이것은 나에게 좋은 일입니다.
확인해 주실 수 있나요?
고마워요 펠리스
답: 데이터 유출안녕 @FR60 ,
나는 이것과 관련하여 어떤 혼란이 생겼을 수 있는지 알 수 있습니다. Kaggle의 기사를 참조했을 때와 마찬가지로 두 가지 종류의 분할과 누출이 언급되어 있습니다. @dale_lehman 이에 대해서도 댓글을 달았습니다.
한 가지 분할은 모델을 훈련하는 데 사용되는 데이터에 결과에서만 알려진 데이터도 포함되지 않도록 하는 것입니다. 이것이 바로 Kaggle이 말하는 "대상 누출"입니다. 다른 하나는 테스트 데이터가 훈련 또는 검증 세트에 들어가는 것을 방지하려는 "훈련-테스트 오염"입니다. 두 번째는 제가 더 많이 언급한 것입니다. 제 데이터 세트에는 일반적으로 예측 변수 다음에 알려진 열이 포함되어 있지 않으므로 "목표 누출"은 일반적으로 걱정할 필요가 없습니다. 오염"이다.
JMP의 경우 데이터 분할을 행 단위 분할 == "훈련 테스트 오염" 또는 열 단위 분할 == "대상 누출"로 생각하는 것이 더 쉬울 수 있습니다. 데이터 구조에 따라 하나만 수행하거나 둘 다를 수행할 수 있습니다.
이제 분할 후 데이터를 표준화/정규화하는 것이 왜 중요한지 알 수 있습니다. JMP는 일반적으로 계산 중에 뒤에서 이 작업을 수행한 다음 보고서를 작성할 때 크기를 다시 조정하는 것으로 알고 있습니다.
원래 게시물로 돌아가서 데이터를 분할해야 하는 방식과 구조화 방식, 즉 시간에 따라 수직으로 구성되어 있는지, 수평으로 구성되어 있는지에 따라 달라질 것 같습니다. 이를 통해 시간 데이터에 대해 행별 또는 열별 분할을 수행할지 결정할 수 있습니다. 그러나 나는 시계열을 언제 잘라낼지 결정하는 데 비슷한 종류의 논리를 적용할 것입니다. 결과 결과가 예측 변수로 모델에 입력될 수 있는 시점이 있다면 그 전에 반드시 잘라야 합니다. "열차 테스트 오염" 문제에 대해 올바른 방법으로 이 작업을 수행할 수 있는지 잘 모르겠습니다. 예측이나 시계열 분석을 수행하려는 경우 JMP는 실제로 모든 데이터를 사용하여 매우 잘 작동합니다. 과거 시간 데이터를 기반으로 앞으로 예측할 기간 수를 결정할 수 있으며 출력에는 신뢰 구간 등이 있습니다.
좋은 토론!,
DS
답: 데이터 유출데이터 전처리 중 데이터 유출에 대한 또 다른 게시물입니다.
https://machinelearningmastery.com/data-preparation-without-data-leakage/
답: 데이터 유출저는 Kaggle의 이 튜토리얼이 매우 흥미롭다고 생각했습니다.
훈련 세트와 테스트 세트에서 데이터를 분할하기 전에 데이터에 누락된 값의 정규화 및 대치를 적용하지 않는 것이 다시 강조됩니다.
https://www.kaggle.com/alexisbcook/data-leakage
챠오 펠리체
답: 데이터 유출안녕 @FR60 ,
당신이 제기한 특정 사항에 대한 내 생각은 다음과 같습니다.
1. 데이터를 표준화 및/또는 정규화하려면 데이터 세트를 분할하기 전에 수행하는 것이 가장 좋을 것 같습니다. 결측값 대치에 관해서는 주의해야 합니다. 누락된 데이터는 유익한 경우도 있고 그렇지 않은 경우도 있습니다. 또한 JMP가 값을 대치하는 방식이 특정 데이터에 적합하지 않을 수도 있습니다. 누락된 데이터를 잘못 대치하고 모델에 잘못 영향을 미치는 인위적인 동작을 데이터에 도입할 수 있습니다.
2. 시계열의 경우, 시계열을 사용하여 미래 사건을 시간에 맞춰 예측하고 예측한다면 적어도 JMP의 시계열 플랫폼에서는 데이터 세트를 분할하지 않을 것이라고 생각합니다. , 해당 플랫폼에는 유효성 검사 열이 없습니다. 그러나 미래의 미사용 데이터에 가장 적합한 것이 무엇인지 확인하기 위해 다양한 예측 모델을 비교할 수 있는 독립적인 데이터 세트를 갖고 싶다면 어느 시점에서 데이터 세트를 분할하고 이를 사용하여 예측 모델을 생성하고 저장합니다. 해당 공식을 데이터 테이블에 추가하고 사용되지 않은 데이터를 얼마나 잘 예측하는지 확인하세요. 간단한 Fit Y by X를 사용하고 R^2 값을 보고 어떤 모델이 결과를 가장 잘 예측하는지 확인하거나 실제 데이터와 모델링된 데이터 사이의 잔차를 보고 잔차 합계가 가장 작은 것이 무엇인지 확인할 수 있습니다. .
하지만 일반적으로 제가 하는 일은 데이터 테이블을 80/20으로 훈련 및 테스트 데이터 세트로 분할하는 것입니다. 그런 다음 테스트 데이터를 완전히 다른 데이터 테이블로 분리하여 내가 구축한 모델이 테스트 데이터를 사용할 기회가 없도록 합니다. 이는 단순히 데이터를 "숨기고" "제외"하는 것 이상이며 알고리즘이 실수로 테스트 데이터를 사용할 가능성을 제거합니다. 그런 다음 "훈련" 세트 데이터 테이블을 사용하여 검증 열을 생성하거나 플랫폼의 검증 부분 옵션을 사용하고 과적합을 줄이기 위해 다시 80/20을 훈련/검증으로 분할합니다. 다양한 플랫폼으로 다양한 모델을 생성한 후 테스트 데이터 세트를 사용하여 어떤 모델이 사용되지 않거나 보이지 않는 데이터를 가장 잘 예측하는지 확인합니다.
도움이 되었기를 바랍니다,
DS
답: 데이터 유출귀하가 링크한 기사는 데이터 유출에 대해 매우 혼란스럽습니다.훈련 및 테스트 데이터 사이의 명확한 경계가 부족하여(누출을 생각하는 한 가지 방법) 훈련 및 검증/테스트 데이터(과적합)에 대한 차등적 성능이라는 개념을 혼동하고 있습니다.내 생각에 두 개념은 서로 다르다.모델이 테스트 데이터가 아닌 훈련 데이터에 맞는 경우 이는 과적합의 예입니다.누출은 이를 설명하지 않습니다. 실제로 누출이 있으면 훈련 데이터에도 나타납니다.또한 테스트 데이터가 무작위로 선택되면 테스트 데이터에 있을 때마다 훈련 데이터에서 누출이 발생해야 합니다(그 반대의 경우도 마찬가지).이는 반응을 예측하는 데 사용되지만 예측이 이루어질 때 알 수 없는 데이터에 유익한 특징이 있기 때문에 발생합니다.
시계열 데이터의 경우 상황이 조금 덜 명확합니다. 테스트 데이터는 전체 데이터 세트에서 무작위로 선택되지 않기 때문입니다(임의의 시간일 수 있음). 기간 ).대부분의 시계열 모델은 과거 데이터를 사용하여 미래를 예측합니다. 이전 데이터를 예측하기 위해 이후 데이터를 사용한 경우 유출이 발생합니다.과적합은 기간을 사용하여 모델을 구축하는 데 사용된 기간의 하위 집합을 예측하는 것입니다. 즉, 기간을 별도로 유지하지 않는 것입니다.시계열 모델에서 과적합과 누출을 피하더라도 모델을 구축하는 데 사용된 기간이 예측하려는 기간과 충분히 유사하다는 가정이 있습니다.기간이 유사하지 않은 경우(예: 모델이 더 이상 적합하지 않게 만드는 힘의 변화) 모델이 그다지 좋지 않다고 말할 수 있지만 이를 누출이라고 부르지 않으며 아마도 과대적합이라고도 부르지 않을 것입니다.
답: 데이터 유출~에게 @dale_lehman , 네 말이 맞습니다. 저는 전체적인 목표에 대해 생각하면서 적어도 공식적으로는 훌륭하고 견고한 모델을 갖기 위해 그것을 혼합했습니다. 누출 방지는 테스트 세트에서 이미 데이터를 본 것이 아니라 목표로 정의됩니다. 여기서 추가 설명을 찾았습니다.
기계 학습의 데이터 유출. 감소하는 문제를 방지하는 방법... | 데빈 소니 :crown: | 데이터 과학을 향하여
하지만 일반적으로 훈련 세트와 테스트 세트를 무작위로 나눌 때 이를 의도적으로 어떻게 수행할 수 있을까요? 프로세스 모델 범주에서는 훈련과 테스트 세트가 모두 동일한 프로세스에서 나온다고 생각합니다. 예측을 생각해보면 다를 수도 있습니다.
답: 데이터 유출누출과 과적합이라는 두 가지를 혼동하고 있는 것은 아닌지 궁금합니다.나는 그들이 상당히 다르다고 생각합니다.과적합은 예측 모델링에서 항상 잠재적인 문제이며 이를 방지하는 일반적인 방법은 검증을 수행하고 데이터가 충분할 경우 별도의 테스트 데이터 세트를 사용하는 것입니다.내 경험에 따르면 JMP에서는 과적합이 다른 경우보다 문제가 덜합니다. 다른 여러 조정 매개변수도 이를 방지하는 데 도움이 되기 때문입니다.예를 들어 의사결정 트리의 경우 최소 분할 크기를 상대적으로 높게 설정하면 과적합을 방지하는 데 도움이 됩니다.그래도 모델이 새 데이터에 대해 현실적인 예측을 생성할 수 있는지 평가하기 위해 별도의 테스트 데이터를 갖는 것이 좋습니다.나는 이것이 시계열 데이터에 특히 중요하다고 생각합니다.
내 생각에 누출은 완전히 다른 문제입니다.누수는 모델이 잘못 지정되었습니다.예측하려는 것과 동시에만 알려지는 요인을 사용하고 있습니다.예를 들어, 고객 유지를 예측하려고 하고 요인 중 하나가 올해 구매인 경우 유지된 고객에 대한 데이터만 갖게 되며 유지하지 않는 고객에 대한 데이터는 누락됩니다.이 경우 올해 구매 요인은 고객 유지를 완벽하게 예측하지만 유용한 모델은 아닙니다.이것이 바로 누출이라고 생각하는 것입니다.
다른 교육/검증/테스트 데이터 세트를 사용하여 누출을 방지하거나 감지할 수 없다고 생각합니다.3가지 중 하나에서 누출을 감지할 수 있습니다. 훈련 데이터의 완벽한 모델(또는 거의 그 정도)이면 누출이 있을 수 있다고 의심하기에 충분합니다.누출을 예방하는 가장 좋은 방법은 요인을 면밀히 고려하고 측정 방법과 시기를 이해하는 것이라고 생각합니다.모델이 사실이라고 믿기에는 너무 좋아 보인다면 누출로 인한 것일 수 있습니다(또는 매우 좋은 모델일 수도 있음).하지만 그 어떤 기술적 장치로도 답할 수 있는 문제는 아니라고 생각합니다.
나는 이것에 대해 다른 사람들이 말하는 것을 듣고 싶습니다.
답: 데이터 유출내 제한된 경험은 다음과 같습니다.
모델링은 매우 복잡합니다(올바른 모델 선택, 데이터 준비, 데이터 분할, 메타 데이터 튜닝...).
훌륭하고 강력한 모델은 분할, 메타데이터, 모델 유형으로부터 독립적입니다.
학습 세트와 테스트 세트 모두 프로세스를 대표해야 하지만 테스트 세트가 포괄적일 필요는 없습니다. 결과를 판단하기 위해서는 훈련/테스트가 필요합니다. @ih 이미 언급했습니다.
분할의 경우 층화 옵션을 사용하여 분할을 제어할 수 있습니다. 그러나 모델링과 분할 모두에 대해 가장 잘 수행하는 방법을 알고 있는 프로세스가 필요합니다.
복잡한 모델의 경우, 그리고 결과가 중요한 경우에는 다양한 모델, 다양한 메타데이터, 다양한 검증 열을 테스트해 보았습니다. 큰 차이가 없으면 문제가 되지 않습니다. JMP(Pro)에서는 이 작업을 매우 쉽게 수행할 수 있습니다.
결국 이 테스트만이 누출이 없는지 여부에 대한 답을 제공합니다. 하지만 솔직히 말해서, 좋은 모델이 있다는 확신이 들면 누출에 대해 신경쓰지 않을 것입니다.
답: 데이터 유출내 2센트:
시계열 데이터가 있는 경우 보간을 많이 수행하지 않는 한 항목 2가 더 큰 문제라고 생각하는 경향이 있습니다.여러 행에 걸쳐 발생하는 노이즈가 있거나 행이 이전과 이후의 행에 연결되어 있는 경우(탱크가 도달하는 데 1개 이상의 행이 걸리는 경우 시간이 지남에 따라 탱크 수준을 모니터링하는 경우) 데이터의 노이즈 원인을 고려하십시오. 예를 들어 새로운 안정 상태) 데이터를 행별로 분할할 수 없으며 검증 또는 테스트 세트가 훈련과 독립적일 것으로 기대할 수 없습니다.
대신 데이터를 더 큰 단위로 테스트 및 검증으로 분할하는 것을 고려할 수 있습니다. 예를 들면 다음과 같습니다.
- 프로세스가 '중요한' 변화를 일으키는 새로운 기간을 식별하고 동일한 그룹에서 정상 상태 실행 기간을 유지합니다(더 어렵지만 더 좋음). 또는
- 서로 다른 실행 조건을 나타낸다고 확신할 만큼 긴 기간을 사용하되 둘 이상의 실행 조건으로 구성되지 않을 만큼 충분히 짧은 기간을 사용하고 해당 기간의 모든 행을 동일한 검증 그룹에 유지합니다(더 쉽고 잠재적으로 여전히 동일한 위험에 노출됨). )
- 위에 식별된 기간을 사용하여 변수의 평균이나 표준 편차 또는 다른 기능 데이터 탐색기를 사용하여 각 실행을 단일 행으로 요약합니다. (최상의)
두 경우 모두 그룹 간 전환 기간을 제외하는 것을 고려할 수 있습니다.
내 개인적인 경험: 이러한 방법 중 하나 이상을 사용하기 시작한 이후로 검증 및 테스트 그룹 통계는 모델의 예측력에 대해 훨씬 더 합리적인 기대를 나타냅니다.