실험 설계(DOE)를 계획하고 실행하는 것은 여러 전문가가 참여하는 복잡한 작업일 수 있습니다. 실험 후에도 결과를 분석, 해석 및 전달하는 데 어려움이 따르는데, 특히 이해관계자들의 기술 전문성 수준이 다양할 경우 더욱 그렇습니다. 이러한 과정을 간소화하고 워크플로를 표준화하기 위해 DOE 결과를 자동으로 시각화하는 스크립트를 개발했습니다. 이 스크립트는 결과를 효과적으로 전달하는 두 개의 직관적인 그래프를 생성합니다.
첫 번째 그래프는 관심 변수 각각의 총 변동성을 보여주며, 실험계획법(DOE)에 따라 각 변수가 얼마나 영향을 받을 수 있는지를 나타냅니다. 두 번째 그래프는 관심 변수가 입력 변수 변화에 얼마나 민감하게 반응하는지를 요약하여 보여줍니다.
저희 스크립트는 필요에 따라 새로운 계산을 추가하고 그래프를 정규화할 수 있도록 유연하게 설계되었습니다. 이 도구를 통해 작업 효율성이 크게 향상되어 수동 방식에 비해 그래프당 약 2시간을 절약할 수 있었습니다. 또한 표준화된 시각화 형식은 비전문가 이해관계자와의 의사소통을 개선하여 실험 설계 결과를 더욱 쉽게 이해할 수 있도록 해줍니다.
NNE는 다양한 이유로 고객들이 실험 설계(DoE)를 수행하도록 지원하고 있습니다. 예를 들어, 견고성 테스트, 프로세스 개선, 검증 등이 있습니다. 저희가 자주 직면하는 큰 어려움 중 하나는 이해관계자들에게 결과를 효과적으로 전달하는 것입니다. 여러 가지 어려움이 있을 수 있는데, 그중에는 통계나 수학에 저희만큼 능숙하지 않은 이해관계자들도 있을 수 있습니다.
어떤 경우에는 수학에 대한 약간의 공포증이 원인일 수도 있습니다. 많은 사람들이 JMP 인터페이스에 익숙하지 않아서 다소 부담스러워할 수도 있고, 우리가 만든 모델의 복잡성 때문에 분석하거나 이해하는 데 어려움을 느낄 수도 있습니다.
또 다른 큰 문제는 일부 분석 작업이 상당히 시간과 노력을 많이 소모한다는 점입니다. 분석 과정이 다소 지루할 수도 있죠. 지루해지면 실수를 저지르기 쉽고, 그건 좋지 않습니다.
우리가 원했던 것은 빠르고 쉽게 그래프를 생성할 수 있는 방법을 만드는 것이었습니다. 이를 통해 이해관계자들에게 결과를 보여주고 전달할 수 있어야 합니다. 그래프는 자동으로 생성되어야 하므로 오류가 적어야 하고, 결과 대기 시간을 줄이기 위해 속도가 빨라야 합니다. 또한, 우리는 많은 모델을 다루기 때문에 다양한 모델을 처리할 수 있어야 합니다.
그래프는 미리 만들어 두었습니다. 그래도 시간이 꽤 오래 걸렸습니다. 일반적으로 두 개의 그래프를 만들었는데, 하나는 결과의 범위를 시각화하는 그래프이고, 다른 하나는 실험 설계에 사용하는 변수에 대한 결과의 민감도를 시각화하는 그래프였습니다.
우리는 분석을 자동화하는 방법을 찾았습니다. 모델을 파이썬으로 내보내 필요한 계산을 수행하고, 몇 가지 전역 최적화 문제를 해결한 다음, 결과를 JMP에서 시각화하고, 비교가 가능하도록 결과를 정규화합니다.
여기 그래프 중 하나를 보실 수 있습니다. 바로 저희가 만든 그래프인데요, 범위 그래프입니다. 여기는 민감도 그래프입니다. 범위 그래프의 경우, 간단한 예시를 하나 보여드리겠습니다. 데이터는 다양한 종류의 콩 품종에서 가져온 것으로, 작물 수확량을 모델링하여 이 그래프를 만들었습니다.
이 그래프를 만드는 과정을 보여드리겠습니다. 아주 간단합니다. 여기 데이터가 있습니다. 어떤 방식으로든 모델을 만들었습니다. 여기에 쉼표가 나타납니다. 그런 다음 도구에서 작은 버튼 하나만 누르면 실행됩니다. 일부 모델, 특히 명목 변수에 레벨이 많은 경우에는 계산량이 다소 많을 수 있습니다. 각 조합에 대해 전역 최적화 문제를 풀어야 하기 때문입니다. 하지만 복잡한 경우에도 결과는 상당히 빠르게 얻을 수 있습니다.
여기서 결과를 확인할 수 있습니다. 20초 정도 걸렸습니다. 여기서 원하는 것을 그래프로 나타낼 수 있습니다. 일반적으로 그래프가 생성됩니다. 원하는 대로 사용자 지정할 수 있습니다. 일부 변수는 특정 분석에만 사용됩니다. 여기서는 원하는 결과를 쉽게 확인할 수 있는 그래프를 거의 즉시 얻을 수 있으며, 이해관계자에게 효과적으로 전달할 수 있습니다.
예를 들어, 이 데이터 세트의 경우 계절에 따라 가장 적합한 작물을 찾고 싶을 수 있습니다. 여기에 표시된 점은 명목값입니다. 즉, 다른 모든 설정을 중간값으로 설정했을 때 얻을 수 있는 수확량입니다. 막대로 표시된 범위는 값이 가질 수 있는 범위를 보여줍니다.
이 작물의 경우, 값은 4,700에서 약 4,000 사이일 수 있습니다. 점선은 관리 한계선, 즉 공칭 ± 자유 표준 편차와 목표값 및 규격 한계선을 나타냅니다. 시즌 1의 경우, 기준치 내에 있는 양호한 후보가 세네 개 있고, 목표값에 거의 정확히 부합하는 후보도 하나 있음을 즉시 확인할 수 있습니다.
시즌 2에서는 일반적으로 수치가 조금 더 낮아지겠지만, 그래도 쓸만한 수치를 찾을 수 있을 겁니다. 이게 바로 그 활용 사례 중 하나였죠. 이제 이 모든 걸 닫을 수 있습니다. 왜냐하면, 이 경우에는 출력 변수가 하나뿐이었거든요.
또 다른 경우는 출력값이 하나 이상일 수 있고, 그 출력값들이 서로 다른 척도를 가질 수 있다는 것입니다. 여기 또 다른 예시가 있습니다. 이것은 시뮬레이션 데이터이지만 실제 사례를 기반으로 합니다. 우리는 분석하고 싶은 제품이 있었습니다. 그것은 제조 제품이었는데, 여러 가지 치수를 측정했고, 어떤 치수가 결과에 가장 중요한 영향을 미치는지 알고 싶었습니다.
여기에는 두 개의 설명 변수와 다섯 개의 차원이 있으며, 이들은 모두 서로 다른 척도를 가지고 있습니다. 이 부분은 생략하겠습니다. 다시 한번 모델을 실행해 보겠습니다. 그래프를 그리는 데 5초 정도 걸리고, 이제 결과를 즉시 확인할 수 있습니다. 여기서 서로 다른 척도 때문에 발생하는 문제를 쉽게 알 수 있습니다. 만약 단순히 보여주려고 하면, 차원 4의 변화만 볼 수 있습니다. 차원 4가 다른 차원들보다 훨씬 크기 때문입니다. 척도를 조정해 볼 수도 있지만, 같은 문제가 발생할 수 있습니다. 차원 1과 2가 차원 3보다 크기 때문에 한 번에 하나 또는 두 개의 차원만 볼 수 있게 됩니다.
대신 우리는 그래프를 어떤 방식으로든 정규화합니다. 예를 들어, 여기서는 목표값으로 정규화할 수 있습니다. 여기에 변수를 입력하면 됩니다. 이제 정규화가 완료되었으므로 목표값은 항상 0이고, 상한값은 1, 하한값은 -1이 됩니다. 이제 차원 3의 경우, 설정값이 2이면 항상 규격 범위를 벗어난다는 것을 즉시 확인할 수 있습니다.
차원 1과 차원 2 모두 규격 한계에 비해 변동성이 크지 않다는 것을 알 수 있습니다. 하지만 설정 2에서는 차원 2가 입력 변수에 따라 크게 변동할 수 있습니다. 이러한 설정에서는 온도를 매우 정밀하게 제어해야 합니다.
목표 사양 한계가 있는 경우 이 방법이 효과적입니다. 목표 사양 한계가 없다면 다른 방법을 사용할 수 있습니다. 절편과 사양 한계로 정규화된 다른 방법도 있습니다. 특정 목표값이 없는 경우, 단순히 사양 한계 내에 있는지 확인하기만 하면 되는데, 이 방법이 바로 그 역할을 합니다. 마지막으로 절편의 표준 편차로 정규화된 방법도 있는데, 이 방법은 항상 효과적이지만, 척도가 다르다는 문제가 발생할 수도 있습니다.
예를 들어, 여기서는 차원 4가 잔차 분산에 비해 상당히 큰 반면, 차원 1은 잔차 분산에 비해 사양 한계가 그다지 크지 않다는 것을 알 수 있습니다.
마지막으로, 여러분은 단순히 값이 어떻게 변할 수 있는지뿐만 아니라 이러한 결과 변수를 어떻게 제어할 것인지에도 관심이 있을 수 있습니다. 여기 나이, 키, 몸무게, 성별 등과 같은 요인에 따른 칼로리 소모량 데이터가 있는 또 다른 데이터 세트가 있습니다. 우리는 이러한 요인들을 고려했을 때 내가 얼마나 많은 칼로리를 소모할 수 있는지 알고 싶습니다.
데이터 세트가 준비되었고, 여기에 모델이 있습니다. 버튼을 누르면 몇 초 후에 그래프가 나타납니다. 여기서는 민감도를 보여줍니다. 민감도란 무엇일까요? 민감도는 명목 변수 설정과 각 연속 변수에 따라 결과 변수가 얼마나 변하는지를 나타냅니다.
예를 들어, 제 경우를 생각해 보면, 운동을 1분 더 하면 약 5.5칼로리를 더 소모할 것으로 예상됩니다. 만약 운동 강도를 높여 심박수를 1만큼 증가시키면 소모되는 칼로리는 약 2.5칼로리 더 늘어날 것입니다.
모델의 다른 변수들은 실제적인 목적에는 그다지 큰 영향을 미치지 않을 수도 있습니다. 제 나이도, 몸무게도 그다지 중요하지 않을 수 있죠. 하지만 이는 물론 변수의 크기에 따라 달라집니다. 만약 제가 운동 시간보다 심박수를 더 많이 조절할 수 있다면, 심박수는 여전히 상당한 영향을 미칠 수 있습니다.
정규화하는 또 다른 방법은 기울기를 구하고 민감도를 계산한 다음, 범위가 얼마나 클 수 있는지를 곱하는 것입니다. 즉, 심박수가 얼마나 변할 수 있는지와 지속 시간이 얼마나 변할 수 있는지를 나타내는 것입니다.
이전에는 심박수가 칼로리 소모에 미치는 영향이 크지 않았다는 것을 여기서 알 수 있습니다. 하지만 이제는 심박수를 운동 시간보다 더 다양하게 조절할 수 있기 때문에 심박수가 운동 시간만큼이나 칼로리 소모에 큰 영향을 미칠 수 있다는 것을 알 수 있습니다.
또한 운동 강도를 높이면 운동 시간 동안 더 많은 칼로리를 소모할 수 있다는 것을 알 수 있습니다. 더 강도 높은 운동을 하면 예상보다 약 60칼로리를 더 소모할 수 있습니다. 실제로 제 체중이나 나이가 얼마나 변하는지 확인할 수 있습니다. 체중이나 나이는 변할 수 있으며, 이는 이전에는 개인별 추정 효과만 볼 수 있었던 것과는 다른 실질적인 영향을 미칠 수 있습니다.
자, 이제 이 모든 걸 마무리 짓겠습니다. 처음으로 돌아가서 생각해 보면, 우리가 하려던 건 실험 분석을 자동화하는 방법이었습니다. 이제 작동하는 방법을 찾았고, 비교적 빠르게 분석할 수 있으며, 그래프 모양을 원하는 대로 설정할 수도 있습니다. 이게 전부입니다.