올해 초, 내 관리자는 세 명의 행동 과학자가 출판된 연구를 검토하여 작성한 블로그 게시물인 Data Colada에서 매우 흥미로운 게시물을 나에게 보냈습니다. Data Colada의 저자는 익명의 연구원 팀과 협력하여 2012년 논문에 사용된 자동차 주행 거리 데이터 세트에서 몇 가지 이상한 변칙 사항을 발견했습니다. 저는 데이터에서 비정상적이거나 예상치 못한 패턴을 식별하는 데 사용할 수 있는 JMP 의 Explore Patterns 플랫폼을 테스트하는 일을 담당하고 있습니다. 이 게시물에서는 JMP의 다른 유용한 도구와 함께 패턴 탐색을 사용하여 자동차 주행 거리 데이터에서 예상치 못한 패턴이나 특이한 패턴을 검색합니다.
배경
자동차 주행거리 데이터 세트의 처음 몇 개의 행과 열은 아래와 같습니다. 이 데이터는 특정 자동차 보험 회사의 고객 13,488명에게 현재 주행 거리계 판독값을 보고하도록 요청한 연구에서 수집되었습니다. 각 고객이 최대 4대의 자동차에 대한 정보를 보고했기 때문에 고객이 보고한 판독값은 update_car1 - update_car4 열로 데이터에 포함됩니다. 데이터에는 보험 증권이 처음 발행되었을 때 각 차량의 주행 거리계 판독값도 포함되어 있습니다. 이러한 열의 이름은 기준선_car1에서 기준선_car4까지로 지정됩니다. 모든 정책이 동시에 발행되지 않았기 때문에 기준선에서 업데이트까지 경과된 시간은 본 연구의 관찰에 따라 다릅니다.

Data Colada 게시물에서 연구원들은 이 데이터 세트에서 발견된 4가지 이상 현상을 제시했습니다. JMP를 사용하여 이러한 각 결과를 자세히 살펴보겠습니다.
변칙 #1: 주행 거리의 분포가 균일합니다.
Data Colada의 저자는 주행 마일의 분포가 0~50,000마일 범위의 균일한 분포와 일치한다는 사실을 발견했습니다.
데이터에는 각 자동차의 주행 기록계 판독값에 대한 기준 및 업데이트 열이 포함되어 있으므로 업데이트된 값에서 기준 값을 빼서 주행 마일을 저장하는 수식 열을 만듭니다. 그런 다음 JMP에서는 분포 플랫폼을 사용하여 기준 및 업데이트 값의 분포와 각 차량의 총 주행 거리를 확인합니다. 각 고객에 대한 첫 번째 자동차의 배포 보고서를 고려하십시오.

기본 마일리지 분포의 형태는 업데이트된 마일리지의 분포와 유사하며, 업데이트 시점에 중앙 주행 거리계가 약 26,000마일 더 높게 표시됩니다. 이 발견 자체는 놀라운 것이 아닙니다. 기준선 및 업데이트 판독값에서 가장 흥미로운 점은 두 명의 참가자가 거의 100만 마일을 주행한 차량을 소유했다는 것입니다! 그들은 아주 좋은 역학을 가지고 있어야 합니다.
보고서에서 가장 놀라운 부분은 위의 세 번째 분포로, 처음 두 분포의 차이를 보여줍니다. 기준 시점과 업데이트 시점 사이에 주행한 마일의 분포는 0~50,000마일 사이에 균일하게 분포된 것으로 보입니다. 50,000마일을 초과하는 값은 없으며 히스토그램의 각 구간에는 대략 동일한 수의 참가자가 포함됩니다. 이 경우 육안 검사는 데이터가 균일하게 분포되어 있다는 확실한 증거를 제공합니다. 그러나 명확하지 않은 데이터의 경우 분포 플랫폼의 Fit Beta 옵션을 사용하여 적합도 테스트를 수행할 수 있습니다 .
아래 스크린샷은 각 참가자 차량의 주행 마일 분포(업데이트 – 기준)를 보여줍니다. 우리는 두 번째, 세 번째, 네 번째 자동차에 대해서도 각 분포가 0에서 50,000 사이에 균일하게 분포되어 있음을 발견했습니다. 이러한 분포 패턴을 기반으로 기본 마일리지 값에 균일하게 분포된 임의 값을 추가하여 업데이트된 마일리지 값이 생성될 수 있다는 결론을 내릴 수 있습니다.

예외 #2: 기본 마일리지는 반올림을 사용했지만 업데이트된 마일리지는 그렇지 않았습니다.
Data Colada의 저자는 기본 마일리지에 가장 가까운 천 단위로 반올림된 많은 값이 있는 반면 업데이트된 마일리지에는 이러한 반올림이 포함되지 않음을 발견했습니다.
Data Colada의 연구원들은 마일리지의 마지막 세 자리를 보고 반올림을 조사했습니다. JSL을 사용하여 유사한 접근 방식을 취할 수 있지만 대신 Explore Patterns를 사용하겠습니다! 이전에 패턴 탐색을 사용한 적이 없다면 분석 > 선별을 선택하여 찾을 수 있습니다.

각 기준선과 업데이트 열을 탐색하기 위해 패턴 탐색을 시작한 후 다음 스크린샷에 표시된 출력을 얻습니다. 일변량 패턴 보고서에서 패턴을 비교할 첫 번째 자동차에 대한 기준 및 업데이트 값을 선택합니다.

기본적으로 패턴 탐색에는 각 열에서 가장 많이 중복된 값, 각 열에서 가장 긴 실행, 각 열에서 가장 긴 중복 시퀀스에 대한 보고서가 포함됩니다. 참가자가 소유한 첫 번째 자동차의 경우 최장 주행 또는 최장 중복 시퀀스 보고서에서 얻을 수 있는 것이 많지 않습니다. 그러나 가장 중복된 값 보고서는 흥미로운 대조를 보여줍니다. 첫 번째 소유 차량의 기본 마일리지에는 가장 가까운 10,000으로 반올림된 것처럼 보이는 값이 많이 있습니다. 이는 반드시 예상치 못한 패턴을 찾는 것은 아닙니다. 내 차량의 주행거리를 물으면 나는 항상 대답할 때 반올림한다.
업데이트된 마일리지에 대한 가장 중복된 값 보고서는 상당히 다릅니다. 이 보고서에는 중복 항목이 훨씬 적으며 표시되는 중복 항목은 기준 값처럼 반올림되지 않습니다. 이는 기준 값에 균일하게 분포된 임의 값을 추가하여 업데이트 열을 생성한 경우 발생하는 현상입니다. 따라서 이 발견은 Anomaly #1과 일치합니다.
예외 #3 – 데이터가 두 개의 글꼴로 입력되었으며 각 관찰에는 다른 글꼴의 '쌍둥이'가 있습니다.
연구자들은 원본 데이터 파일에서 관찰 내용이 두 가지 다른 글꼴을 사용하여 기록되었음을 확인했습니다. 연구원들은 영리한 정렬을 통해 한 글꼴의 각 기본 관찰이 다른 글꼴의 매우 유사한 행에 해당한다는 것을 발견했습니다.
다양한 글꼴을 발견하고 이러한 접근 방식을 취한 연구원들에게 박수를 보냅니다. 그러나 데이터가 모두 동일한 글꼴이고 이 위험 신호가 발생하지 않았다고 가정해 보겠습니다. 행과 열 사이의 흥미로운 관계를 식별하기 위해 JMP를 사용할 수 있습니까? 물론 가능합니다. 결국 이것이 JMP 블로그입니다.
패턴 탐색을 사용하여 연속 행의 열 사이에 선형 관계가 있는지 조사할 수 있습니다. 다음의 간단한 예를 고려하십시오. 처음 4개 행의 열은 Y=2*X인 정확한 선형 관계를 갖습니다. 다음 세 행에서 두 열은 Y=0.5*X인 정확한 선형 관계를 갖습니다.

패턴 탐색을 사용하여 기준 열 사이에서 이와 같은 선형 관계를 검색할 수 있습니다. Anomaly #1을 아직 발견하지 못했다면 업데이트된 열에서도 선형 관계를 찾는 것이 합리적입니다.

정확한 선형 관계가 많았거나 선형 관계가 많이 연속된 경우 이는 한 열의 값이 다른 열의 배수를 사용하여 생성되었다는 신호일 수 있습니다. 여기에는 기준 열이 정확한 선형 관계를 갖는 행이 몇 개만 있습니다. 색상화 옵션을 사용하여 이러한 셀을 보고 불규칙성을 검사할 수 있지만 반올림된 값이 많은 이 크기의 데이터 세트의 경우 몇 가지 선형 관계를 찾는 것은 놀라운 일이 아닙니다.
패턴 탐색을 사용하여 기준 값에 대한 두 열의 행 간에 의심스러운 선형 관계가 있는지 조사했습니다. 그러나 결과는 그다지 유용하지 않았습니다. 이제 다시 기준 값에 대해 두 행 사이의 열 사이의 선형 관계를 찾아보겠습니다. 이렇게 하려면 데이터 전치 시 패턴 탐색을 사용해야 합니다.
저는 JMP의 전치 옵션을 사용하여 최소 세 대 이상의 차량에 대한 주행 거리를 보고한 참가자에 대해 기준 열을 기준으로 데이터를 전치했습니다. 참가자가 두 대 이하의 자동차를 보유한 행은 선형 관계를 식별하는 데 도움이 되지 않으므로 제외했습니다.

이 전치된 데이터에 대한 패턴 탐색 보고서에는 기울기가 대략 1인 정확한 선형 관계가 많이 있습니다. 따라서 원래 데이터 테이블에는 자동차 전반에 걸쳐 기준값이 거의 쌍 행으로 구성된 행이 많이 있습니다. (힌트: 경사 열을 마우스 오른쪽 버튼으로 클릭하고 위치 선택 기능을 사용하여 경사가 1에 가까운 모든 행을 강조 표시할 수 있습니다. 경사가 0.99에서 1.01 사이인 쌍은 69개입니다.)

선형 관계 표 위에서 색상화를 선택하여 정확한 선형 관계의 모든 값에 색상을 지정하거나 Y 열을 마우스 오른쪽 버튼으로 클릭하여 특정 값에 색상을 지정할 수 있습니다. 아래 표에는 선형 관계 보고서의 처음 세 행에 대한 색상화된 값이 포함되어 있습니다.

Explore Patterns는 기본 마일리지 값이 모든 자동차에서 매우 유사하고 정확한 선형 관계를 갖는 여러 쌍의 '운전 쌍둥이'를 식별했습니다. 정확한 선형 관계는 아니지만 여전히 매우 밀접하게 관련되어 있는 더 많은 쌍을 찾아 이에 대한 후속 조치를 취할 수 있습니다. Data Colada 게시물에 설명된 것처럼 네 번째 자동차의 기준값을 기준으로 정렬하면 많은 운전 쌍둥이를 쉽게 식별할 수 있습니다.
예외 #4 - 한 글꼴에는 반올림된 기준선 값이 많이 있고 다른 글꼴에는 그렇지 않습니다.
연구원들은 Calibri 글꼴의 기준 값이 반올림되었으며 Cambria 글꼴의 값은 반올림되지 않았음을 발견했습니다.
이제 일부 행은 한 글꼴로 작성되고 다른 행은 두 번째 글꼴로 작성되었으며 데이터에 각 행의 글꼴이 포함된 열이 있다는 것을 알고 있다고 가정합니다. 글꼴 이름을 기준 열로 사용하여 탐색 패턴을 사용할 수 있습니다.

탐색 패턴 보고서에서 볼 수 있듯이 Calibri 글꼴 행의 기준 마일리지 값은 반올림된 값이 많은 반면 Cambria 행의 기준 값은 반올림되지 않습니다. 고객이 보고한 마일리지는 반올림될 것으로 예상하므로 이는 원래 보고된 값이 Calibri 글꼴이 있는 행이었고 "driving Twin" 데이터가 생성된 다음 Cambria 글꼴로 입력되었음을 나타냅니다.
결론
새로운 데이터 세트를 얻을 때마다 탐색적 분석과 데이터 정리를 수행할 가능성이 높습니다. 이상값을 검색하거나 데이터에서 누락된 값을 확인하거나 각 변수의 분포를 볼 수도 있습니다. 이 게시물을 통해 귀하가 패턴 탐색을 사용하여 데이터의 비정상적인 패턴을 확인하는 데 도움이 되기를 바랍니다. 패턴 탐색을 사용하여 찾은 모든 패턴이 문제가 있거나 관련이 있다는 증거는 아니지만 이 유틸리티는 추가 조사가 필요한 패턴을 찾을 수 있는 도구를 제공합니다.
안녕 @마두 . 이 질문에 감사드립니다. Transposed 데이터 테이블의 열 제목이 이 형식을 사용하도록 만드는 두 가지 솔루션을 공유하겠습니다.
먼저 아래 스크린샷에 표시된 수식을 사용하는 원본 데이터 테이블에 새 열을 만들 수 있습니다.

이 열을 만든 후에는 Transpose를 수행할 때 레이블 열로 사용할 수 있습니다.

Transposed 데이터 테이블을 이미 만들었으므로 사용할 수 있는 두 번째 옵션은 JSL을 사용하여 열 제목을 편집하는 것입니다. 이렇게 하려면 전치된 데이터 테이블을 연 다음 파일 > 새로 만들기 > 스크립트를 선택하고 아래 스크립트를 스크립트 편집기 창에 붙여넣으십시오. 이 스크립트를 실행하면 열 제목이 원하는 형식으로 업데이트됩니다.
dt = Data Table("Transpose of Car Mileage Data");
colNames = dt << Get Column Names(string);
For(i=2, i <= Length(colNames), i++,
Column(dt, i) << Set Name("id=" || char(colNames[i]))
);
이게 도움이 되길 바란다. 귀하의 의견에 다시 한 번 감사드립니다.
안녕 @jacob_rhyne
안내해 주셔서 감사합니다. 이제 전치 행렬을 만들었습니다.
이 연습에서 내가 할 수 없는 유일한 생각은 열 제목 id=12, id=23, id=36 등을 한 번에 변경하는 것입니다. 각 열 이름을 수동으로 변경해야 합니까? 한 번에 모든 열 제목을 바꾸기 위해 id=를 추가하는 수식을 사용하고 싶었습니다.
안녕 @마두 . 행 > 행 선택 > 위치 선택에서 위치 선택을 찾을 수 있습니다.

그러나 대화식으로 JMP를 사용하여 이러한 행을 선택하려면 JSL을 사용하는 대신 새 열을 추가하고 이러한 행을 식별하는 수식을 만드는 것이 좋습니다. 이렇게 하려면 다음 단계를 시도하십시오.
- 상단 메뉴에서 Cols > New Columns...를 선택합니다.
- 새 열 메뉴에서 열 속성 > 수식을 선택합니다.
- 수식 편집기에서 아래와 같이 수식을 입력합니다.

수식을 입력했으면 확인을 클릭하여 열을 만듭니다. 새 열에서 값이 1인 행은 자동차가 3대 이상인 참가자에 해당합니다. 아래와 같이 값이 1인 행을 마우스 오른쪽 버튼으로 클릭하고 "일치하는 셀 선택"을 클릭하면 값이 1인 모든 행을 선택할 수 있습니다.

JSL을 사용하여 이 작업을 수행하는 방법에 대한 질문의 경우 고급 로그를 살펴보고 대화식으로 수행한 작업에 대해 생성된 JSL을 찾는 것이 좋습니다. 예를 들어 아래 스크린샷은 이 페이지에 첨부된 데이터 테이블을 열고 위에서 설명한 새 수식 열을 만들고 선택한 행을 사용하여 데이터를 전치한 후의 로그를 보여줍니다. 언제든지 다시 실행할 수 있는 새 스크립트에 로그의 스크립트를 저장할 수 있습니다.

도움이 되었기를 바랍니다. 읽어주셔서 다시 한 번 감사드립니다.
안녕 @마두 읽어주셔서 감사합니다. 최소 세 대의 차량에 대한 마일리지를 보고한 참가자를 식별하려면 JMP의 Select Where 기능을 사용하여 이러한 행을 선택할 수 있습니다. 그런 다음 데이터를 전치할 때 선택한 행만 사용하도록 선택할 수 있습니다. 다음은 자동차가 3대 이상인 모든 참가자의 행을 선택한 다음 선택한 행만 사용하여 데이터를 바꾸는 JSL 스크립트입니다.
Data Table( "Car Mileage Data" ) << Select Where(
Sum(Is Missing(:baseline_car1),
Is Missing(:baseline_car2),
Is Missing(:baseline_car3),
Is Missing(:baseline_car4)
) <= 1);
Data Table( "Car Mileage Data" ) << Transpose(
columns( :baseline_car1, :baseline_car2, :baseline_car3, :baseline_car4 ),
Transpose selected rows only( 1 ),
Output Table( "Transpose of Car Mileage Data" )
);