안녕하세요 여러분. 오늘 함께해 주셔서 감사합니다. 오늘은 제가 참여했던 프로젝트에 대해 이야기해 보려고 합니다. 발표 제목은 "개발에서 테스트까지: JMP 애드인 제작 및 검증 여정"입니다.
간단히 제 소개를 하겠습니다. 저는 현재 미국 클렘슨 대학교에서 수학 과학 박사 과정을 밟고 있는 대학원생입니다. 제 연구 분야는 실험 설계와 선호 학습에 걸쳐 있습니다. 2024년 여름부터 JMP의 실험 설계 및 신뢰성 팀에서 인턴으로 근무하고 있습니다. 그곳에서 이산 선택 실험과 소프트웨어 테스트 관련 프로젝트에 참여했습니다. 상당히 다른 두 분야죠. 제 소개는 이쯤에서 마치겠습니다.
오늘 발표의 개요를 먼저 설명드리겠습니다. 첫 번째 부분에서는 지난 여름 동안 개발한 이 애드인을 만들게 된 동기에 대해 이야기하겠습니다. 이 애드인을 개발하게 된 계기는 JMP의 Easy DOE 프로그램에 대한 사용성 연구를 진행하면서 다양한 인구 통계학적 사용자 그룹별 사용자 인터페이스 선호도를 파악하기 위해서였습니다. 애드인 개발 동기에 대한 설명 후에는 실제로 애드인을 소개하고 시연해 보겠습니다. 마지막으로 JSL 단위 테스트 프레임워크를 사용하여 애드인을 테스트하고 검증하는 방법에 대해 간략하게 설명하겠습니다.
첫 번째 섹션입니다. 저희 애드인을 개발하게 된 동기에 대해 설명드리겠습니다. 아시다시피 JMP에는 Easy DOE라는 프로그램이 있습니다. 이 프로그램은 실험 설계 및 분석의 전 과정을 안내하는 데 사용됩니다. Easy DOE 워크플로는 몇 가지 구성 요소로 이루어져 있습니다. 실험자는 먼저 관심 있는 요인과 반응을 정의합니다. 그 다음 수집할 데이터를 분석하는 데 사용할 모델을 선택합니다. 모델을 선택한 후에는 해당 모델에 맞는 실험을 설계합니다.
실험 설계를 마친 후에는 실험을 실행하고 수집한 데이터를 '데이터 입력' 탭에 입력할 수 있습니다. 데이터 수집이 완료되면 모델을 분석하고, 데이터를 분석하여 모델을 적합시킬 수 있습니다. 마지막으로, 해당 모델을 사용하여 예측을 수행하고, 최적의 요인 설정을 선택하는 데 활용할 수 있습니다. 최종적으로는 모델의 요약 보고서를 확인할 수 있습니다.
오늘 우리가 살펴볼 부분은 바로 '분석' 탭입니다. Easy DOE를 사용해 보신 분들은 아시겠지만, 분석 탭은 그림 2와 같이 생겼습니다. 지난 여름 동안 저희는 Easy DOE를 사용하는 실험자와 사용자들이 분석 탭을 더 쉽게 활용할 수 있도록 몇 가지 개선 사항을 제안했습니다. 그 결과, 사용자 인터페이스(UI) 버전을 몇 가지 제시했고, 어떤 버전이 가장 선호되는지 알아보고자 했습니다.
이 UI 디자인은, 우리가 구상했던 방식대로, 요인 구조를 가지고 있었습니다. 우리가 특히 관심을 가졌던 UI 부분은 바로 이 마우스 오버 도움말이었습니다. 이 도움말에는 사용자가 모델의 통계적 속성에 대한 정보를 얻을 수 있도록 여러 가지 메시지가 표시됩니다. 마우스 오버 도움말 설정에는 다음과 같은 메시지들이 포함됩니다. '입력됨' 메시지는 특정 항이 모델에 포함되었는지 여부를 나타냅니다. 이 메시지는 두 가지 버전으로 제공되었습니다. '유의성' 메시지는 해당 항이 유의미한지 여부를 나타냅니다. '유전' 메시지는 특정 항이 유의미하지 않음에도 불구하고 모델에 포함된 이유를 설명합니다.
종종 '유전'이라는 속성이 있는데, 상호작용 항이 유의미하지만 주효과가 유의미하지 않더라도 주효과를 포함시키는 경우입니다. 마지막으로, 이 마우스오버 도움말 설정의 또 다른 요소는 마우스오버 도움말의 위치입니다. 신뢰 구간 위에 표시할지, 아니면 미리 보기 열 위에 표시할지 여부입니다.
저희는 사용자들이 어떤 설정을 가장 선호하는지 알고 싶었습니다. 말씀드렸듯이 네 가지 요인이 있었는데, 그중 두세 가지는 두 가지 레벨을 가지고 있었고, 한 가지는 세 가지 레벨을 가지고 있었습니다. 따라서 마우스 오버 도움말 설정에 대한 사용자 인터페이스는 최대 24가지 버전이 나올 수 있었습니다.
또 한 가지는 Easy DOE 사용자 중에는 실험 설계 경험이 부족하거나 아직 경험이 많지 않은 사람들이 많다는 점입니다. 하지만 경험이 풍부한 사용자들도 Easy DOE를 사용하는데, 이들은 개인적인 용도나 다른 사람들을 가르치는 데 활용하기도 합니다. Easy DOE에는 다양한 사용자층이 존재합니다. 저희는 각 사용자층이 어떤 마우스 오버 도움말 설정을 선호하는지 파악하여, 각 그룹에 맞춘 도움말 디자인을 제공하고자 했습니다.
우리는 이 문제를 맥락적 이산 선택 실험(contextual discrete choice experimentation)이라는 프레임워크를 통해 접근하고자 했습니다. 이 프레임워크가 무엇인지 간단히 설명드리겠습니다. 먼저 데이터 수집 과정부터 이야기해 보겠습니다. 맥락적 이산 선택 실험에서는 참가자 그룹과 이 참가자들에 대한 공변량 정보(covariate information)가 있습니다. 예를 들어, 이를 공변량 정보 또는 맥락 정보라고 부릅니다. 흔히 사용자의 인구통계학적 정보가 이에 해당합니다.
이 프레임워크에서는 다양한 참가자들에게 설문지를 작성하게 하는데, 각 질문에서 참가자들은 두 개 이상의 대안 디자인을 비교하고 더 선호하는 디자인을 선택하도록 요청받습니다. 데이터 수집 과정은 매우 직관적이며, 사람들이 실제 생활에서 선택을 내리는 방식을 반영합니다.
이제 맥락적 이산 선택 실험에 대한 모델링 및 분석에 대해 간략히 설명하겠습니다. 데이터를 수집한 후에는 연구 대상(이 경우 마우스 오버 도움말 설정)의 요소뿐만 아니라 참가자로부터 얻은 맥락 정보도 포함하는 효용 모델을 데이터에 적용할 수 있습니다. 이 두 가지를 결합하면 다양한 인구 통계학적 집단의 사용자들이 각기 다른 마우스 오버 도움말 설정에 대해 어떤 선호도를 보이는지 파악할 수 있습니다. 궁극적으로 이 효용 모델을 적용하면 각 인구 통계학적 집단에서 어떤 마우스 오버 도움말 디자인이 가장 선호되는지 알아낼 수 있습니다.
맥락적 이산 선택 실험의 중요한 구성 요소 중 하나는 실험 설계입니다. 참가자에게 제시할 질문을 어떻게 선택할까요? 일반적인 이산 선택 실험에 익숙하다면, 좋은 실험 설계를 위해서는 사용자의 선호도에 대한 사전 정보가 필요한 경우가 많다는 것을 알 것입니다.
맥락적 이산 선택 실험에서 우리는 먼저 소위 스크리닝 연구를 수행합니다. 이 연구에서는 일정 수의 참가자를 모집하고, 그들의 맥락 정보 또는 인구 통계학적 정보를 확보한 후, 설문 조사를 통해 선호도 데이터를 수집합니다. 이 스크리닝 연구를 통해 얻은 데이터를 바탕으로 사용자의 선호도를 특징짓는 모델을 구축합니다. 그런 다음 이 모델을 사용하여 다양한 인구 통계학적 집단 간의 선호도를 이해할 수 있습니다.
따라서 이 모델을 사용하여 베이지안 사전 확률을 생성하고, 이를 바탕으로 설문지를 위한 베이지안 D-최적 설계를 만들 수 있습니다. 이를 통해 각 인구통계학적 집단에 맞춘 설문지를 설계하여 해당 집단으로부터 보다 효율적인 방식으로 더 많은 통계 정보를 얻을 수 있습니다. 이것이 바로 우리가 이 문제에 접근하고자 했던 방법론입니다. 참가자들에게 통계적으로 매우 효율적인 설문지를 제공하여, 보다 효율적으로 정보를 수집하고 다양한 인구통계학적 집단 간의 선호도를 파악하고자 했습니다.
이 추가 기능을 만드는 과정에 대해 간단히 설명드리겠습니다. 먼저, 모르시는 분들을 위해 JSL은 JMP 스크립팅 언어입니다. JSL을 사용하면 여러 단계를 거치는 정기적인 분석을 실행하거나 매일 생성되는 데이터에 특정 모델을 적용하는 등 JMP의 기능을 확장할 수 있습니다. JSL은 말 그대로 JMP의 기능을 확장할 수 있도록 해주는 언어입니다. JMP 추가 기능이란 다른 JMP 사용자들이 다운로드하여 사용할 수 있도록 JMP의 기능을 확장하는 JSL 스크립트입니다.
왜 특정 문제를 해결하기 위해 JMP 추가 기능을 개발했을까요? 우선, 저희는 여러 건의 사용성 연구를 진행하고 있었습니다. 동일한 사용성 연구, 즉 마우스 오버 도움말 설정에 대한 연구를 여러 시점에 걸쳐 진행했습니다. 시간이 지남에 따라 점점 더 많은 데이터를 수집했고, 이를 바탕으로 실험 설계나 설문지를 개선했습니다. 또한, 사용자 인터페이스의 다양한 요소를 변경하면서 다른 사용성 연구도 진행했습니다. 예를 들어, 분석 탭의 알림 메시지 색상 구성 및 위치에 대한 사용성 연구를 진행했습니다.
이 추가 기능을 개발하게 된 또 다른 이유는 이러한 맥락적 이산 선택 실험을 설계하는 과정이 번거로웠기 때문입니다. 각 집단에 대한 베이지안 D-최적 설계를 생성하기 위해 사전 평균과 공분산 행렬을 계산해야 하는 경우가 많았는데, JSL 스크립트를 통해 이 과정을 자동화할 수 있다는 것을 알게 되었습니다.
마지막으로, 이 맥락적 이산 선택 실험 프레임워크는 매우 광범위한 선택 과제에 사용할 수 있습니다. 사용성 연구에만 국한되지 않고, 사용자가 여러 옵션 중에서 선호도를 밝혀야 하는 모든 종류의 연구에 적용 가능합니다. 저희는 이 애드인을 단순히 저희 자신을 위한 도구로만 만든 것이 아니라, 다른 사람들도 문제를 해결하는 데 활용할 수 있도록 만들고 싶었습니다.
저희 컨텍스트 기반 이산 선택 추가 기능의 워크플로에 대해 간략하게 설명드리겠습니다. 우선 사용자 또는 실험자는 스크리닝 연구를 통해 데이터를 수집해야 합니다. 스크리닝 연구에는 참가자에게 어떤 질문을 했는지, 속성은 무엇이었는지, 프로필 속성, 연구 대상의 요인, 그리고 피험자 공변량과 같은 정보가 포함되어야 합니다.
이 데이터를 확보한 후에는 스크리닝 모델을 데이터에 적용합니다. 스크리닝 모델에서 실험자는 프로필 효과(본 실험에서는 마우스 오버 도움말 설정)와 피험자 효과를 모두 지정해야 합니다. 이를 통해 실험자는 효용 모델을 생성할 수 있습니다. 그런 다음 JMP의 선택 분석 플랫폼을 사용하여 이 효용 모델을 추정합니다.
이 과정이 완료되면 사용자는 추가 연구를 위한 인구통계학적 집단을 선택합니다. 이를 위해 사용자는 각 주제 효과 또는 맥락적 요인의 수준을 선택합니다. 이러한 수준들의 조합을 통해 추가 연구 대상 집단이 지정됩니다. 집단이 선택되면 해당 집단에 대한 베이지안 D-최적 설계 또는 베이지안 D-최적 설문지가 구성되어 실험자가 통계적으로 효율적인 방식으로 해당 집단을 추가 연구할 수 있게 됩니다.
이제 컨텍스트 기반 이산 선택 실험 추가 기능을 시연해 보겠습니다. JMP를 열고 추가 기능으로 이동합니다. 데이터 테이블을 선택합니다. 이 데이터 테이블에는 정보가 포함되어 있습니다. 어떻게 생겼는지 잠깐 보여드리겠습니다. 이 데이터 테이블에는 마우스 오버 도움말에 대해 수행된 이전 사용성 연구 정보가 있습니다. 사용자가 어떤 옵션을 선택했는지, 어떤 옵션이 제시되었는지와 같은 정보가 있습니다. 또한 사용자의 실험 설계 경험 수준, Easy DOE 사용 이유(개인 용도인지 교육용인지)와 같은 컨텍스트 정보도 포함되어 있습니다.
이 안에서… 여기를 클릭해서 열어보겠습니다. 먼저 사용자가 선택한 항목을 나타내는 응답 표시기를 넣고, 선택 항목 ID와 주제 ID도 설정합니다. 그런 다음 프로필 효과를 입력할 수 있는데, 저희 설정에서는 마우스 오버 시 표시되는 도움말 메시지 세 가지였습니다. 원한다면 상호작용 효과를 추가할 수도 있지만, 지금은 기본 효과 모델만 유지하겠습니다. 또한, 사용자의 경험 수준이나 다른 사람을 가르치는지, 아니면 개인적인 용도로 Easy DOE를 사용하는지와 같은 주제 효과를 추가할 수 있습니다.
보시다시피, 여기 있는 정보의 상당 부분이 선택 분석 플랫폼의 설정과 매우 유사합니다. 실행 버튼을 누르면 백그라운드에서 선택 분석 플랫폼이 실행되어 스크리닝 연구에 대한 스크리닝 모델을 분석합니다. 물론, 선택 분석 플랫폼과 상호 작용하는 것처럼 이 결과와도 상호 작용할 수 있습니다. 예를 들어, 유틸리티 프로파일러를 불러와서 다른 사람들을 교육하는 숙련된 사용자들이 유전 관련 메시지에 대해 특정 옵션(여기 두 번째 대안)을 선호하는 것을 확인할 수 있습니다.
이 부분을 살펴보면, 추가 연구를 위해 인구 통계학적 그룹을 선택하라는 구성 요소가 나타납니다. 예를 들어, Easy DOE의 전문가 사용자, 즉 실험 설계 경험이 풍부하고 다른 사람들을 가르칠 때 어떤 경험을 하는지 연구하고 싶다고 가정해 보겠습니다. 다른 사람들을 가르치는 전문가 사용자의 선호도를 파악하기 위한 설문지를 만들고 싶습니다. 이때 '설계 생성'을 클릭하면 선택 설계 플랫폼이 나타나는데, 이때 선택 분석 단계나 선별 연구 단계에서 이미 입력한 정보가 자동으로 플랫폼에 반영됩니다.
우리는 속성을 가지고 있고, 이 특정 집단에 대한 모델, 즉 우리가 지정한 주효과 모델을 가지고 있습니다. 여기서 가장 중요한 것은 선별 연구에서 얻은 모델을 사용하여 우리가 연구하고자 하는 특정 집단에 대한 베이지안 사전 확률(사전 평균 및 사전 분산)을 계산할 수 있었다는 것입니다.
이렇게 사전 정보를 생성한 후에는 '설계 생성'을 클릭하여 베이지안 D-최적 설계를 만들 수 있습니다. 그러면 연구 대상 그룹에 맞춰 조정된 설계가 나타납니다. 이 설계는 해당 그룹의 선호도에 대한 사전 정보를 바탕으로 만들어졌습니다. 이제 이 설계는 우리가 추가 연구를 진행하려는 그룹에 최적화되었습니다. 이것이 바로 맥락적 이산 선택 실험 추가 기능에 대한 시연입니다. 몇 가지 창을 닫고 슬라이드로 돌아가겠습니다.
이어서 마지막으로 JSL 단위 테스트 프레임워크를 통해 애드인을 테스트하는 방법에 대해 이야기하겠습니다. 먼저 단위 테스트가 무엇인지 모르시는 분들을 위해 설명드리겠습니다. 단위 테스트는 소프트웨어 애플리케이션의 개별 구성 요소를 테스트하여 오류를 식별하는 것입니다. 특히 자동화된 단위 테스트를 사용하면 소프트웨어 애플리케이션에서 단위 테스트를 자주 실행하여 개발 과정에서 새롭게 발생하는 오류를 식별하고 수정할 수 있습니다.
특히 JMP에는 JSL 애플리케이션에 특화된 JSL 단위 테스트 프레임워크가 있습니다. 이 프레임워크에서 가장 중요한 기능은 `ut assert` 함수로, 사용자가 JSL 애플리케이션의 특정 구성 요소를 테스트할 수 있도록 해줍니다. 사용자는 예상 출력값을 가지고 있으며, 이 값을 애플리케이션의 실제 출력값과 비교하여 테스트합니다. 예상 출력값이 일치하면 테스트 케이스가 통과한 것이고, 일치하지 않으면 테스트 케이스가 실패한 것입니다. 사용자가 `ut assert` 함수를 사용하여 스크립트를 작성하고 실행하면, 모든 테스트 케이스가 통과했는지 또는 어떤 테스트 케이스가 실패했는지 알려주는 보고서가 반환되어 실패한 테스트 케이스를 추가적으로 조사할 수 있습니다.
저희는 컨텍스트 기반 이산 선택 실험 추가 기능 내에서 여러 가지를 테스트했습니다. 예를 들어, 상호작용 효과를 추가하는 데 사용하는 X 버튼이 제대로 작동하는지 테스트했습니다. 두 가지 특정 옵션을 선택하고 X 버튼을 누르면 어떤 결과가 나와야 하는지 알고 있었기 때문에, 실제 출력과 비교하여 시스템이 올바르게 작동하는지 확인하는 것이 목표였습니다.
또 하나 중요한 테스트 사항은, 추가 연구를 위해 인구 통계학적 집단을 선택할 때, 실험자가 옵션 중 하나를 비워두면 메시지가 표시되는지 확인하는 것이었습니다. 테스트를 통해 이 오류 메시지가 필요한 대로 표시되는 것을 확인했습니다.
마지막으로, 이것은 중요한 부분입니다. 우리는 선택 설계 도구에 입력하는 사전 정보가 정확한지 확인하고 싶었습니다. 그래서 이를 검증했습니다. 선택 분석 플랫폼의 출력 결과와도 대조해 보았습니다. 두 결과가 일치하면 사전 정보를 선택 설계 도구에 올바르게 입력하고 있다는 것을 알 수 있었고, 불일치가 있으면 무언가 잘못되었다는 것을 알 수 있었습니다. 다행히도, 우리는 올바른 사전 정보를 정확하게 입력하고 있다는 것을 확인했습니다.
자동화된 단위 테스트에서 가장 중요한 점 중 하나는 코드 리팩토링을 할 때입니다. 자동화된 단위 테스트를 통해 코드를 리팩토링하고 오류가 발생했는지 확인할 수 있습니다. 여기서 코드 리팩토링이란 개발 과정에서 코드를 변경하는 것을 의미합니다. 코드를 변경했을 때, 변경 내용과 관련 없는 다른 부분에 문제가 생겼는지 어떻게 알 수 있을까요?
한 가지 예를 들자면, 이 추가 기능의 테스트 사용자 중 한 명이 컨텍스트 요소 중 하나에 값 레이블이 있는 경우 해당 컨텍스트 요소에 대한 목록이 제대로 표시되지 않는다는 것을 발견했습니다. 사실상 전혀 표시되지 않았습니다.
저희는 되돌아가서 그 오류를 수정했습니다. 하지만 오류를 수정하는 과정에서 다른 부분에 문제가 생기지 않았는지 확인하고 싶었습니다. 다행히 유닛 테스트 스크립트를 다시 실행해 보니 새로운 오류가 발생하지 않았습니다. 따라서 다른 부분에 문제가 생기지 않았다는 것을 확인할 수 있었습니다. 보시는 바와 같이, 저희가 제안한 값 레이블 문제에 대한 수정 사항이 제대로 적용되어 문제가 해결되었습니다.
단위 테스트는 다음과 같은 이유로 중요합니다. 첫째, 코드에 오류가 있는지 확인할 수 있습니다. 둘째, 코드를 리팩토링하여 다른 오류가 발생하지 않았는지 확인할 수 있습니다. 셋째, JMP가 업데이트됨에 따라 JMP 내부 구성 요소나 플랫폼이 변경될 수 있습니다. 이 단위 테스트 스크립트가 있으면 JMP가 업데이트될 때마다 애드인을 테스트하여 JMP 내부 변경 사항이 애드인에 영향을 미쳤는지 여부를 확인할 수 있습니다.
오늘 발표의 결론으로, 저는 다양한 인구 통계학적 사용자 그룹을 대상으로 Easy DOE의 사용자 인터페이스 선호도를 파악하기 위한 맥락적 이산 선택 실험 설계 문제를 소개했습니다. 그리고 JSL 스크립팅을 활용하여 이러한 이산 선택 실험을 구성하는 데 매우 편리한 JMP 애드인을 만드는 방법을 시연했습니다. 마지막으로, 애드인 개발 과정 중 또는 개발 후에 단위 테스트를 수행하는 것이 얼마나 중요한지, 그리고 이를 통해 개발 과정 중 및 개발 후 오류를 어떻게 발견할 수 있는지에 대해 논의했습니다.
오늘 제 발표는 여기까지입니다. 질문 있으신가요?