Neural Concept
경력근거: analyze and process engineering data using our platform and python libraries
※ 실제 산출물이 아닌 AI 예측 시안입니다.
Neural Concept은 고객사의 해석 데이터를 받아 설계 흐름을 바꾸는 회사이고, 이 자리는 고객 엔지니어링 팀과 함께 그 데이터를 다루는 일부터 시작합니다. 고객사 해석 이력에는 발산한 실행과 조건을 잘못 넣은 실행이 섞여 있는데, 그 상태로 학습에 넣으면 모델이 아니라 데이터의 잡음을 배우게 됩니다. 이 문제는 남의 해석 이력을 통째로 받아 시작하는 파견 자리에서만 생깁니다. 공고 업무는 데이터 처리부터 고객 교육까지 걸쳐 있는데 1주 범위에서 고를 수 있는 것은 하나라 데이터 선별 축을 골랐습니다. 이 포트폴리오는 조건표를 규칙으로 집행하고 걸러 낸 근거를 화면으로 보여주는 기술을 보여줍니다. 유체·구조 해석 자체나 3D 딥러닝 모델 설계의 전문성은 주장하지 않습니다. 그 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
고객 엔지니어링 팀과 함께 프로젝트를 돌리며 공학 데이터를 분석하고 처리하는 일이 첫 업무로 적혀 있습니다. 받은 데이터가 쓸 수 있는 상태인지 가르는 일이 그 처리의 시작입니다.
CAD·CAE·제조 영역에서 기술의 가치를 보이는 개념검증 전달이 업무입니다. 데이터 상태 점검은 그 개념검증의 결과를 좌우하는 앞단입니다.
고객 팀이 방법과 플랫폼을 제대로 쓰도록 교육하는 일이 업무에 있습니다. 무엇을 왜 걸렀는지 화면으로 보여 주는 것이 그 교육의 실물 자료가 됩니다.
고객사가 넘긴 시뮬레이션 실행 기록과 해석 종류별 유효 조건표를 대조해, 학습 데이터로 쓸 수 없는 케이스를 사유별로 나눠 보여주는 관리자 페이지입니다. 판정은 수렴 여부와 결과 값의 물리 범위, 조건 값의 유효 구간을 조건표와 견주는 대조로 정합니다.
고객사 설계팀과 함께 첫 모델을 만들려는 파견 엔지니어입니다. 넘겨받은 해석 결과 수천 건 중 어떤 것이 발산했고 어떤 것이 조건을 잘못 넣고 돌렸는지 몰라, 학습을 돌려 놓고 결과가 이상하면 그제야 원본을 뒤집니다.
해석 종류마다 수렴 기준과 결과 값의 유효 범위가 정해져 있으면, 학습에 넣어도 되는 케이스인지는 사람이 원본을 뒤지지 않아도 대조로 갈라집니다.
시뮬레이션 실행 기록과 유효 조건표를 올리면 학습에 쓸 수 없는 케이스를 사유별로 보여주는 관리자 페이지입니다. 해석을 직접 돌리지 않고 넘겨받은 기록만 읽습니다.
통과한 케이스의 조건 값 분포를 구간별로 세어, 학습 데이터가 어느 구간에 몰려 있는지 보여주는 화면입니다.
해석 종류 사전과 유효 조건표를 파일로 분리해 고객사마다 다른 해석 묶음을 같은 판정으로 돌리고, 통과 목록을 학습 파이프라인이 받아 갈 수 있게 내보냅니다.
담당자가 실행 기록 50행과 조건표를 올려 학습에 쓸 수 없는 케이스가 사유별로 나뉜 화면을 보는 것을 시연합니다.
결측·중복·미등록 종류가 섞인 입력 30종을 올려도 화면이 깨지지 않고, 판정하지 못한 케이스는 사유가 붙어 남습니다.
잔차가 비어 있는 실행은 수렴한 것으로 세지 않고 잔차 누락으로 따로 답니다. 확인하지 못한 것을 통과로 만들지 않습니다.
판정과 손으로 만든 정답표를 맞춰 사유별로 어긋난 건을 셉니다. 단, 기록과 정답을 모두 작성자가 만든 합성 기준이라 성능 측정이 아니라 데모 조건 동작입니다.
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 더미데이터 자가채점이며, 실제 선별 정확도는 Neural Concept 고객사의 실제 해석 이력과 실제 유효 기준이 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명합니다.
발산한 케이스만 골라 넣으면 걸러 내는 일은 어렵지 않습니다. 해석 종류 표기가 도구마다 다른 건, 잔차가 빈 건, 조건표에 없는 종류를 실행 기록에 섞어 둔 이유입니다.
범위를 벗어났다고 해서 해석이 틀렸다고 단정할 수 없습니다. 실제로 극단 조건을 일부러 돌린 실험일 수 있으므로, 판정은 기준을 벗어났다는 사실까지만 읽어야 합니다.
실제 도입하면 고객사마다 해석 도구와 수렴 기준이 다릅니다. 조건표를 해석 담당자와 합의해 채우는 일이 도입 단계의 실제 과제입니다.
형상 파일 자체의 품질과 격자 상태는 이 도구의 범위 밖입니다. 실행 메타 값만 보므로, 형상 검토는 설계 담당자가 이어서 합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사가 넘긴 시뮬레이션 실행 기록입니다. 해석 종류 표기가 도구마다 대소문자·띄어쓰기로 흔들리고, 사전에 없는 신규 종류와 같은 케이스 번호가 두 번 들어온 건, 잔차가 비어 있는 행을 일부러 섞었습니다.
| case_no | analysis_raw | inlet_velocity | residual | result_value | solver_status |
|---|---|---|---|---|---|
| SIM-001 | external aero | 25 | 0 | 0.31 | converged |
| SIM-002 | External Aero | 30 | 0.001 | 0.33 | converged |
| SIM-003 | EXTERNAL AERO | 35 | 0.12 | 2.8 | diverged |
| SIM-004 | external aero | 120 | 0.001 | 0.35 | converged |
| SIM-005 | thermal | 5 | 0 | 340 | converged |
아래 JSON Schema에 맞는 시뮬레이션 실행 기록 행을 더 만들어 주세요. {"type":"object","properties":{"case_no":{"type":"string"},"analysis_raw":{"type":"string"},"inlet_velocity":{"type":"number"},"residual":{"type":["number","null"]},"result_value":{"type":["number","null"]},"solver_status":{"type":"string","enum":["converged","diverged","stopped"]}},"required":["case_no","analysis_raw","inlet_velocity","residual","result_value","solver_status"]} 한 analysis_id에 케이스가 여러 건 붙도록 만들어 주세요. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 미매핑으로 analysis_raw가 사전에 없어 analysis_id가 null인 행, 둘째 표기흔들림으로 같은 종류를 external aero와 External Aero와 EXTERNAL AERO처럼 대소문자만 다르게 적은 행, 셋째 중복으로 같은 case_no가 두 행에 있는 재적재 건, 넷째 결측으로 residual이나 result_value가 null인 행, 다섯째 경계극단으로 inlet_velocity가 유효 구간의 상한과 정확히 같은 행. 학습에 써도 되는 정상 케이스가 전체의 절반쯤 되게 해 주세요. 또한 형식 깨뜨리기 시도 3건을 별도 파일로 만들어 solver_status에 enum 밖 값을 넣거나 inlet_velocity를 빼서 스키마 검증이 걸러내는지 확인하게 해 주세요.{"type":"object","properties":{"case_no":{"type":"string"},"analysis_raw":{"type":"string"},"inlet_velocity":{"type":"number"},"residual":{"type":["number","null"]},"result_value":{"type":["number","null"]},"solver_status":{"type":"string","enum":["converged","diverged","stopped"]}},"required":["case_no","analysis_raw","inlet_velocity","residual","result_value","solver_status"]}해석 종류별 수렴 기준과 값의 유효 범위입니다. 결과 상한이 아직 정해지지 않은 종류를 일부러 섞었습니다.
| analysis_id | analysis_label | max_residual | min_result | max_result | max_inlet_velocity |
|---|---|---|---|---|---|
| external_aero | 외부 공력 | 0.001 | 0 | 1 | 100 |
| thermal | 열해석 | 0.001 | 250 | 400 | 20 |
| structural | 구조해석 | 0.002 | 0 | — | 0 |
| internal_flow | 내부 유동 | 0.001 | 0 | 5 | 60 |
| fatigue | 피로해석 | 0.005 | 0 | — | 0 |
아래 JSON Schema에 맞는 해석 유효 조건 행을 더 만들어 주세요. {"type":"object","properties":{"analysis_id":{"type":"string"},"analysis_label":{"type":"string"},"max_residual":{"type":"number"},"min_result":{"type":"number"},"max_result":{"type":["number","null"]},"max_inlet_velocity":{"type":"number"}},"required":["analysis_id","analysis_label","max_residual","min_result","max_result","max_inlet_velocity"]} analysis_label은 한글로 적어 주세요. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 결측으로 max_result가 null인 상한 미정 해석, 둘째 경계극단으로 max_residual이 아주 작은 엄격한 해석과 아주 큰 느슨한 해석. 또한 형식 깨뜨리기 시도 3건을 별도 파일로 만들어 max_residual에 문자열을 넣거나 analysis_id를 빼서 스키마 검증이 걸러내는지 확인하게 해 주세요.{"type":"object","properties":{"analysis_id":{"type":"string"},"analysis_label":{"type":"string"},"max_residual":{"type":"number"},"min_result":{"type":"number"},"max_result":{"type":["number","null"]},"max_inlet_velocity":{"type":"number"}},"required":["analysis_id","analysis_label","max_residual","min_result","max_result","max_inlet_velocity"]}| Python | 실행 기록과 조건표를 읽어 판정을 돌리는 본체입니다. |
| 머신러닝 | 이 도구가 걸러 낸 결과가 학습 입력이 됩니다. 학습 자체는 이 포트폴리오의 범위 밖입니다. |
| 시뮬레이션 | 판정 대상이 되는 실행의 성격이며, 수렴 여부와 잔차가 핵심 판정 값입니다. |
| CAE | 해석 종류를 가르는 축이며, 종류마다 유효 범위가 달라 조건표가 종류별로 나뉩니다. |
| 데이터 처리 | 여러 실행 파일에서 메타 값을 표로 모으는 적재 단계이며, 이 화면의 입력을 만듭니다. |
| 시각화 | 통과한 케이스의 조건 분포를 구간별로 보여주는 2주차 화면입니다. |
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 통과한 케이스의 조건 분포를 봅니다.
✓ pass → 분포까지가 한 덩어리입니다. 더 키우려면 조건표를 해석 종류별로 분리하고 통과 목록을 내보냅니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · case_no + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
usable학습 가능not_converged수렴 실패result_out_of_range결과 범위 이탈condition_out_of_range조건 범위 이탈result_missing결과 누락residual_missing잔차 누락analysis_unmapped해석 종류 미매핑duplicate_case케이스 번호 중복시뮬레이션 케이스 한 건이 학습 데이터로 쓸 수 있는지의 판정 결과입니다. 못 쓰면 왜인지를 근거와 함께 담습니다.
{"type":"object","properties":{"case_no":{"type":"string"},"verdict":{"type":"string","enum":["usable","not_converged","result_out_of_range","condition_out_of_range","result_missing","residual_missing","analysis_unmapped","duplicate_case"]},"checked_value":{"type":["number","null"]},"allowed_limit":{"type":["number","null"]},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{},"quote":{"type":["string","null"]}},"required":["field","value"]}},"next_action":{"type":"string"}},"required":["case_no","verdict","checked_value","allowed_limit","evidence","next_action"]}[
{
"case_no": "SIM-001",
"verdict": "usable",
"checked_value": 0.0004,
"allowed_limit": 0.001,
"evidence": [
{
"field": "residual",
"value": 0.0004
},
{
"field": "max_residual",
"value": 0.001
},
{
"field": "result_value",
"value": 0.31
}
],
"next_action": "기준을 모두 만족합니다. 학습 목록에 넣습니다."
},
{
"case_no": "SIM-015",
"verdict": "usable",
"checked_value": 100,
"allowed_limit": 100,
"evidence": [
{
"field": "inlet_velocity",
"value": 100
},
{
"field": "max_inlet_velocity",
"value": 100
},
{
"field": "residual",
"value": 0.0005
}
],
"next_action": "조건이 상한과 정확히 같습니다. 극단 구간이라 학습 비중을 따로 봅니다."
},
{
"case_no": "SIM-003",
"verdict": "not_converged",
"checked_value": 0.12,
"allowed_limit": 0.001,
"evidence": [
{
"field": "solver_status",
"value": "diverged"
},
{
"field": "residual",
"value": 0.12
},
{
"field": "max_residual",
"value": 0.001
}
],
"next_action": "발산한 실행입니다. 학습에서 빼고 격자와 초기 조건을 확인합니다."
},
{
"case_no": "SIM-008",
"verdict": "result_out_of_range",
"checked_value": -12,
"allowed_limit": 0,
"evidence": [
{
"field": "result_value",
"value": -12
},
{
"field": "min_result",
"value": 0
}
],
"next_action": "결과가 물리적으로 나올 수 없는 값입니다. 학습에서 빼고 후처리 설정을 확인합니다."
},
{
"case_no": "SIM-004",
"verdict": "condition_out_of_range",
"checked_value": 120,
"allowed_limit": 100,
"evidence": [
{
"field": "inlet_velocity",
"value": 120
},
{
"field": "max_inlet_velocity",
"value": 100
}
],
"next_action": "조건이 유효 구간을 벗어났습니다. 의도한 극단 실험인지 해석 담당자에게 확인합니다."
},
{
"case_no": "SIM-013",
"verdict": "result_missing",
"checked_value": null,
"allowed_limit": 1,
"evidence": [
{
"field": "result_value",
"value": null
},
{
"field": "solver_status",
"value": "converged"
}
],
"next_action": "수렴했지만 결과 값이 비어 있습니다. 통과로 세지 않고 후처리 산출물을 다시 받습니다."
},
{
"case_no": "SIM-006",
"verdict": "residual_missing",
"checked_value": null,
"allowed_limit": 0.001,
"evidence": [
{
"field": "residual",
"value": null
},
{
"field": "solver_status",
"value": "stopped"
}
],
"next_action": "중단된 실행이라 잔차가 없습니다. 수렴한 것으로 세지 않고 다시 돌립니다."
},
{
"case_no": "SIM-009",
"verdict": "analysis_unmapped",
"checked_value": null,
"allowed_limit": null,
"evidence": [
{
"field": "analysis_raw",
"value": "acoustic nvh",
"quote": "acoustic"
}
],
"next_action": "사전에 없는 해석 종류입니다. 조건표를 받기 전에는 학습 목록에서 빼 둡니다."
}
][자동 검증 · 1주차] 1. verdict가 enum 여덟 값 안에 있는지 확인합니다. 2. case_no·verdict·checked_value·allowed_limit·evidence·next_action이 모두 있는지 확인합니다. 3. residual이 0 이상인지 확인합니다. 4. residual이 null이면 verdict가 residual_missing인지 확인합니다. 5. evidence의 field가 두 입력 표의 컬럼에 실재하는지 확인합니다. 6. evidence의 quote가 그 행 analysis_raw의 일부인지 확인합니다. 7. next_action이 존댓말로 끝나는지 확인합니다. [판정 규칙] 1. 해석 종류 표기은 대소문자와 띄어쓰기, 구분자를 없애 소문자로 모은 뒤 analysis_validity_specs의 analysis_id와 맞춥니다. 맞는 것이 없으면 미매핑으로 남기고 그 행은 나머지 판정에서 뺍니다. 2. 같은 행 번호가 두 번 들어오면 앞 건만 남기고 뒤 건은 적재 단계에서 사유와 함께 뺍니다. [수동 검증] 1. 조건이 구간을 벗어난 케이스가 의도한 극단 실험인지 해석 담당자가 확인합니다. 2. SIM-002·SIM-003처럼 종류 표기가 흔들렸지만 사전으로 맞춰진 케이스는 미매핑 사유를 달지 않는 것이 맞는지 확인합니다. [평가 러너 · 2주차] 1. 통과한 케이스의 조건 값 분포를 구간별로 세어 어느 구간이 비어 있는지 나눕니다. 2. 기록과 정답을 작성자가 만든 합성 기준이라 이 수치는 성능 측정이 아니라 데모 조건 동작입니다.
근거: analyze and process engineering data using our platform and python libraries