Runs in your browser · nothing is uploaded브라우저 안에서만 · 파일은 올라가지 않습니다

Is your data AI-ready?이 데이터, AI에 넣어도 될까?

Drop a CSV or Excel file. Get a 0–100 readiness score, every problem in plain language, and a cleaned file you can download — before you paste it into an AI.CSV나 엑셀 파일을 올리면 0–100점 준비도 점수, 문제마다 쉬운 설명, 정리된 파일까지 받습니다. AI에 붙여 넣기 전에 확인하세요.

No file handy? Try a sample파일이 없다면 샘플로 해 보기

How it works이렇게 진행됩니다

1
Score채점
Missing values, mixed formats, duplicates and personal data — each flagged with the raw evidence.빈 값, 섞인 형식, 중복, 개인정보를 찾고 하나하나 근거 숫자와 함께 보여 줍니다.
2
Clean정리
You pick the rules. Only mechanical fixes are applied; anything that needs judgment is left alone.규칙은 직접 고릅니다. 기계적으로 고칠 수 있는 것만 고치고, 판단이 필요한 것은 건드리지 않습니다.
3
Analyze분석
See which answers changed after cleanup, and the patterns the cleaned data actually shows.정리 전후로 바뀐 답과, 정리된 데이터에서 실제로 보이는 패턴을 보여 줍니다.

How the score is measuredAI-ready 점수는 이렇게 잽니다

The code: scorer.mjs →코드: scorer.mjs →

The score is a weighted sum of three areas: completeness 40%, consistency 35% and personal data 25%. Each area starts at 100 and loses the points below for every problem found (never below 0).점수는 세 영역의 가중합입니다: 완전성 40% · 일관성 35% · 개인정보 25%. 영역마다 100점에서 시작해, 아래 문제가 하나 나올 때마다 표의 점수만큼 깎습니다(0점 아래로는 안 내려갑니다).

80–100AI-readyAI에 넣어도 됨 55–79Needs cleanup정리 필요 0–54Not ready아직 안 됨 Any personal data개인정보가 있으면Remove personal data first — whatever the score (below 55 stays “Not ready”)개인정보부터 처리 — 점수와 상관없이 (55점 미만은 “아직 안 됨”)
Area영역Counted as a problem문제로 세는 것Points off감점
Completeness완전성40% A column that is entirely empty전부 비어 있는 열−12
A column 50% or more empty50% 이상 비어 있는 열−8
A column 20% or more empty20% 이상 비어 있는 열−4
Blanks dressed as data: N/A, NULL, none, unknown, TBD, “-”, 미상, 없음, 해당없음, 모름, 무응답, 알 수 없음, 미입력 (counted on top of the rules above; not in an entirely empty column; 없음 is kept as an answer when the same column also says 있음; 기타 is a real category and never counts)값처럼 적힌 빈칸: N/A, NULL, none, unknown, TBD, “-”, 미상, 없음, 해당없음, 모름, 무응답, 알 수 없음, 미입력 (위 감점과 따로 셉니다. 전부 빈 열은 제외. 같은 열에 “있음”이 있으면 “없음”은 답으로 보고 세지 않습니다. “기타”는 실제 분류라 세지 않습니다)−2
Unreadable characters (�) — in the column names, and in the values (one problem each, for the whole file)읽을 수 없는 글자(�) — 열 이름에 하나, 값에 하나 (파일 전체에서 각각 한 번)−8 each각 −8
Consistency일관성35% Exact duplicate rows완전히 같은 행−3, plus the duplicate share in %, up to −15−3에 중복 비율(%)만큼 더, 최대 −15
Numbers and text mixed in one column (10–90% numeric; not counted in personal-data or ID-number columns, or when units explain all the text)한 열에 숫자와 글자가 섞임 (숫자가 10–90%. 개인정보·식별번호 열, 단위로 모두 설명되는 경우는 세지 않음)−6
Numbers written with a unit (1,234원 · 1.2만원 · 3억) in a column that is otherwise numbers (at least 90% numbers or unit-numbers)숫자에 단위가 붙음 (1,234원 · 1.2만원 · 3억) — 숫자 아니면 단위 붙은 숫자가 90% 이상인 열−6
Dates written more than one way (2021-03-05 · 03/05/2021 · March 5, 2021 · 2021.03.05 · 2021. 3. 5. · 2021년 3월 5일 · 2021/03/05 · 21-03-05)날짜가 두 가지 이상 형식으로 적힘 (2021-03-05 · 03/05/2021 · March 5, 2021 · 2021.03.05 · 2021. 3. 5. · 2021년 3월 5일 · 2021/03/05 · 21-03-05)−8
Placeholder dates: 1900-01-01, 0000-00-00자리만 채운 날짜: 1900-01-01, 0000-00-00−6
An ID column with repeats — its name ends in id / uid / uuid / guid and at least 90% of values are unique값이 겹치는 ID 열 — 이름이 id / uid / uuid / guid로 끝나고 값의 90% 이상이 서로 다른 열−8
The same value spelled several ways (USA / usa / U.S.A.)같은 값을 여러 가지로 적음 (USA / usa / U.S.A.)−4
Personal data개인정보25% A column where at least 30% of filled values (and at least 3) look like an email address, a phone number, a US Social Security number, a Korean resident or foreigner registration number (주민등록번호/외국인등록번호), or — only in a column named 계좌 / account number — a bank account number. A phone number is 10–15 digits with separators, exactly 10–11 bare digits, or a Korean number written with dots (010.4567.8901); other decimals, dates and columns named “…code” / “…코드” never count. A registration number is YYMMDD-G######, with or without the hyphen: the first six digits must be a real date, the 7th digit 1–8, and the date not in the future (no checksum — numbers issued since October 2020 don’t have one). Columns named 법인/corp are skipped for it. A business registration number (사업자등록번호, ###-##-##### with a valid check digit) is labelled as a business ID, not personal data, and costs no points.채워진 값의 30% 이상(최소 3개)이 이메일, 전화번호, 미국 사회보장번호, 주민등록번호/외국인등록번호, 또는 — 열 이름이 계좌·account number일 때만 — 계좌번호처럼 보이는 열. 전화번호는 구분자가 있으면 10–15자리, 숫자만이면 정확히 10–11자리, 또는 점으로 쓴 한국 번호(010.4567.8901)입니다. 그 밖의 소수점 값, 날짜, 이름이 “…code”·“…코드”로 끝나는 열은 세지 않습니다. 주민등록번호는 하이픈이 있든 없든 YYMMDD-G######이고, 앞 6자리가 실제 날짜, 7번째 자리가 1–8, 날짜가 미래가 아니어야 합니다(검증 번호는 보지 않습니다 — 2020년 10월 이후 번호에는 없습니다). 이름에 법인·corp가 들어간 열은 이 검사에서 뺍니다. 사업자등록번호(###-##-#####, 검증 번호가 맞는 것)는 개인정보가 아니라 사업자 식별번호로 표시하고 감점하지 않습니다.−15 per column열마다 −15
  • Facts vs judgment. Every problem comes with its raw evidence (for example missing=26/44), so you can check it yourself. The weights and point values are a judgment, written down here and in TRUST.md, and they can be changed.사실과 판단을 나눕니다. 문제마다 근거 숫자(예: missing=26/44)가 붙어 있어 직접 확인할 수 있습니다. 가중치와 감점은 판단이며, 여기와 TRUST.md에 적어 두었고 바꿀 수 있습니다.
  • Not measured. Whether the values are true; whether the data represents what you want to study; whether you may use it (see the data maps). Outliers and skew are not scored either — they appear as patterns after cleanup.재지 않는 것. 값이 사실인지, 알고 싶은 대상을 제대로 대표하는지, 써도 되는 데이터인지(데이터 지도 참고)는 재지 않습니다. 튀는 값·쏠림은 점수에 넣지 않고 정리 뒤 패턴으로 보여 줍니다.
  • Known gaps. Korean registration numbers are now detected; still not: passport and driver’s licence numbers, partly masked numbers (900101-1******), numbers inside free text, a column where fewer than 30% of values are personal data, bank account numbers in a column whose name does not say account, yy.mm.dd dates, compound amounts (3억 5천만원), and CSVs that are neither UTF-8 nor CP949 (their unreadable characters are reported). A 13-digit number that happens to start with a valid date and a 1–8 (e.g. 2410221234567) can still be read as a registration number.아직 못 잡는 것. 주민등록번호·외국인등록번호는 이제 찾습니다. 아직 못 찾는 것: 여권·운전면허 번호, 일부를 가린 번호(900101-1******), 긴 글 속에 섞인 번호, 개인정보 값이 30%가 안 되는 열, 이름에 계좌가 없는 열의 계좌번호, yy.mm.dd 날짜, 섞어 쓴 금액(3억 5천만원), UTF-8도 CP949도 아닌 CSV(읽을 수 없는 글자는 알려 줍니다). 우연히 실제 날짜와 1–8로 시작하는 13자리 숫자(예: 2410221234567)는 주민등록번호로 읽힐 수 있습니다.

Why bother?왜 해야 하나?

Full experiment →실험 전체 보기 →
We asked an AI the same questions about the sales-pipeline sample — once on the raw file, once after cleaning.영업 파이프라인 샘플에 대해 AI에게 같은 질문을 두 번 했습니다 — 원본 파일로 한 번, 정리한 파일로 한 번.
Question질문AI on the dirty file원본 파일의 AI 답AI on the cleaned file정리한 파일의 AI 답
Total pipeline value파이프라인 총액 $1,818,500a duplicate row's $18,500 counted twice중복 행의 $18,500가 두 번 더해짐 $1,800,000
Earliest close date가장 이른 마감일 1900-01-01the placeholder, reported as the answer자리만 채운 날짜를 답으로 냄 2025-01-01
Real emails handed to the AIAI에 그대로 넘어간 실제 이메일 44exposed before any model can “handle” them모델이 “알아서 처리”하기 전에 이미 넘어감 0masked가림
Cheap-tier model, identical prompts, single-shot runs — transcripts committed unedited. A frontier model self-cleaned the 44-row file, but flipped its “earliest date” answer between two identical runs, and the emails were already sent. Judgments made once, explicitly, beat judgments improvised per-prompt.저가형 모델, 같은 프롬프트, 한 번씩 실행했고 대화 기록은 고치지 않고 그대로 올렸습니다. 최상위 모델은 44행 파일을 스스로 정리했지만, 같은 실행 두 번에서 “가장 이른 날짜” 답이 바뀌었고 이메일은 이미 보낸 뒤였습니다. 한 번, 명시적으로 내린 판단이 프롬프트마다 즉흥으로 내린 판단보다 낫습니다.