실제 업무자료 없이 AI에 분석 구조를 묻는 합성 예제 만들기

고객 정보 없이 요금제별 사용시간의 분석 방법을 묻고 싶다면 계산에 필요한 관계와 실패 조건을 새 자료로 만들어 보세요. 실제 파일을 읽지 않고 계정 3개·이벤트 6개로 질문과 로컬 확인 절차를 완성해요.

첨부 링크는 이 글의 예제 ZIP으로 연결돼요. 압축을 푼 뒤 링크에 표시된 파일을 열면 입력·코드·완성 자료를 함께 사용할 수 있어요.

원본에서 가져온 행 없이 처음부터 만든 합성 자료예요. Codex가 질문문·코드를 작성하고 2026년 10월 13일 Python 3.12.3에서 실행했어요. 계정표 (ZIP: accounts.csv), 이벤트표 (ZIP: events.csv), 전달할 질문문 (ZIP: question.txt), 코드 (ZIP: analyze.py)를 함께 사용할 수 있어요.

실제 업무자료를 옮기지 않고 작은 합성 자료를 만드는 장면
설명 삽화 1. 합성 예제에는 필요한 관계와 예외를 남기고 실제 사람이나 조직의 값을 복사하지 않아요.

남길 정보는 계산이 달라지는 조건으로 골라요

질문은 ‘요금제별 유효 사용시간’이에요. 이름·연락처는 빼고, 계정 ID로 두 표를 연결하며 한 계정에 이벤트가 여러 개 있다는 관계를 남겨요. 그래야 일대일 병합을 잘못 전제하지 않아요.

원래 질문의 구조 합성 예제에서 표현한 방법 선택 이유
계정은 요금제를 하나 가짐 S001=basic, S002=pro, S003=basic 기준표 키의 유일성을 확인해요
계정 하나에 여러 이벤트 S001의 E1·E2 정상적인 일대다 관계를 남겨요
수집 중 완전 중복 가능 E2를 똑같이 한 번 더 넣음 중복이 합계를 늘리는지 봐요
측정 누락과 실제 0분 E3 빈칸, E5 0분 두 상태를 다르게 처리해요
등록되지 않은 계정 E4의 S999 조인에서 사라질 행을 찾게 해요

단위는 분이에요. 실서비스의 시간대·분포·희귀 명칭·자유 메모는 사용하지 않았어요. 따라서 실제 자료에서의 이상 탐지 성능이나 운영 임계값의 적합성을 검증하는 자료로 쓸 수는 없어요.

합성이라는 이름만으로 안전성을 단정하지 않아요. 실제 기록을 변형하면 원본과의 연결 가능성이 남고 조직의 제공 규칙도 적용돼요. NIST의 생성 AI 위험관리 프로파일은 사용 맥락에 맞춘 위험 관리를 다뤄요. 이 글의 작은 예제는 개인정보 보호 인증이나 조직의 외부 제공 승인을 대신하지 않아요.

합성 이벤트 6행과 기준표에 없는 S999, 빈칸과 0분이 구별된 화면
그림 1. 제공 예제 브라우저 화면이에요. 실자료의 내용 대신 계산을 바꾸는 관계와 예외를 남겼어요.

질문에는 ‘어떻게 계산할지’까지 포함해요

‘이 데이터를 분석해 줘’라고만 요청하면 중복을 지울 기준과 빈칸 처리 방식이 답마다 달라질 수 있어요. 첨부한 질문문은 다음 조건을 명시해요.

계정 기준표의 ID는 유일하고 이벤트는 계정별 다수 행이에요. 동일 이벤트 ID와 내용은 한 번만 계산하고, 같은 ID의 내용이 다르면 중단해 주세요. 미등록 계정과 빈 사용시간은 예외로 분리해요. 0분은 유효한 이벤트로 세어요. 합계와 함께 행 수·예외 수 검사를 보여 주세요.

미등록 계정의 30분은 요금제를 확인할 때까지 예외로 남겨요. 임의로 basic이나 전체 합계에 넣지 않아요. pro의 빈 사용시간도 0분이 아니에요. pro 합계가 없다는 것은 합산할 유효 값이 없다는 뜻이에요.

코드를 같은 폴더에서 python3 analyze.py로 실행하면 basic은 10+20+0=30분, 유효 이벤트는 3행으로 나와요. 나머지 3행은 완전 중복·결측·미등록 계정 한 건씩이에요. 유효 3행과 예외 3행을 더하면 원본 6행이 돼요. 기준표에 같은 계정 키를 넣은 검사에서는 이벤트 복제를 막기 위해 중단됐어요.

요금제가 중간에 바뀐다면 예제의 관계도 바꿔요

S001이 9월 15일 basic에서 pro로 바뀌는 새 합성 조건 (ZIP: dated-synthetic-input.json)을 만들었어요. E1은 9월 10일 10분, E2는 전환일인 9월 15일 20분이에요. 나머지 중복·결측·미등록·0분 조건은 유지했어요. 실제 고객 이력을 변형한 자료가 아니에요.

답하려는 질문·조건 실제 계산 결과 필요한 선택
현재 요금제별 고객의 누적 사용 pro 30분, basic 0분 최신 요금제 기준표
이벤트 당시 요금제별 사용 basic 10분, pro 20분 계정+유효기간으로 연결
전환 구간이 비거나 겹침 확인된 basic 10분만, E2 20분 보류 누락·중복 구간을 먼저 확인

현재 고객 구성을 묻는다면 최신 기준표가 맞아요. 당시 요금제의 사용량을 묻는데 최신 표를 쓰면 E1의 10분도 pro로 옮겨져요. 두 질문을 구별한 뒤 합성 예제에도 event_date, valid_from, valid_to를 넣어야 해요. 이 예제는 시작일 포함·종료일 제외로 정해서 전환일 E2를 pro에 배정했어요.

python3 compare_plan_rules.py로 정상 이력과 구간 누락·겹침을 실행한 결과 (ZIP: plan-rule-results.json)를 남겼어요. 시작을 16일로 늦추면 E2가 어느 구간에도 없고, 이전 종료를 16일로 늦추면 두 구간에 걸려요. 둘 다 임의로 첫 행을 고르지 않고 보류했어요. 각 경우 유효행+예외행=6행도 대조했어요. 부분합 10분을 전체 합계로 보고하지 않아요.

현재 요금제와 이벤트 당시 요금제로 계산한 차이 및 구간 누락·겹침의 보류 결과 화면
그림 2. 제공 예제 브라우저 화면이에요. 같은 30분도 질문과 시간 관계에 따라 귀속이 달라져요.
합성 예제의 작동 확인과 실제 업무 검증을 구분하는 장면
설명 삽화 2. 합성 자료에서 코드가 돌아간 사실은 실제 자료의 정확도나 성능을 보장하지 않아요.

원본에 돌아가서는 승인된 내부 환경에서 키·단위·변경 이력의 의미부터 확인해요. 적용 전 확인 절차 (ZIP: local-application-checklist.md)에 따라 원본 행·결측·미연결 수를 기록하고 일부 계정을 손계산해요. 예외가 예상과 다르면 원본이나 오류 메시지를 외부에 보내기보다 해당 관계를 재현하는 새 합성 조건을 만들어요. 이번에는 원본 적용·조직 승인·분포의 대표성을 검증하지 않았어요.

예제 파일을 한 번에 받아 다시 확인해요

이 글의 입력·코드·완성 자료 ZIP을 새 폴더에 풀면 R15/README.txt, replay.py, assets 폴더가 함께 생겨요. 개별 코드 파일만 저장하면 보조 모듈이나 입력이 빠질 수 있으므로 처음에는 이 묶음을 사용하세요. R15 폴더에서 다음 명령을 실행하면 본문에 사용한 검사를 순서대로 수행해요.

python3 replay.py

확인할 결과는 기본30분·유효3/예외3, 기간 귀속10/20분예요. 명령이 성공해도 이 값과 본문의 적용 범위를 함께 대조하세요. 실행 안내 (ZIP: README.txt)에 필요한 파일과 개별 명령을 적었어요. 실행 코드는 analyze.py (ZIP: analyze.py) · compare_plan_rules.py (ZIP: compare_plan_rules.py)에서 직접 볼 수 있어요. Python3.12의 표준 라이브러리를 사용하며, 명령이 실패하면 ZIP의 폴더 구조와 오류에 나온 파일부터 확인해요. 실제 앱 실행에 필요한 프로그램은 원래 설명을 따르세요.

작성·확인: Codex가 예제 자료와 초안을 작성하고 본문에 명시한 원문 대조·계산·자동 검사를 수행했어요. 별도 사람의 사용성 검증은 하지 않았어요.

합성 예제에서 확인한 병합 규칙을 더 점검하려면 중복 키와 미연결 행 확인로 이어서 확인할 수 있어요.

설명 삽화 2장은 GPT로 생성한 개념 설명이에요. 실제 예제의 작업 화면과 실행 결과는 기존 그림·첨부 자료에서 따로 확인할 수 있어요.