Przejdź do treści

Tech Website

Porady i Wiedza ze Świata Technologii

Jak bezpiecznie analizować poufne dane z AI dzięki danym syntetycznym?

7 min czytania
Jak bezpiecznie analizować poufne dane z AI dzięki danym syntetycznym?

Większość poradników o pracy z AI pokazuje ten sam schemat: wgrywasz plik CSV, zadajesz kilka pytań i po chwili dostajesz wykresy z gotowym raportem. Rzadko pada w nich pytanie, czy w ogóle masz prawo udostępnić ten plik. W firmach najcenniejsze zbiory zwykle są poufne, bo zawierają adresy e-mail klientów, adresy rozliczeniowe, numery kart płatniczych albo wynagrodzenia. Wyjściem z tej sytuacji są dane syntetyczne, czyli cyfrowy bliźniak tabeli z tymi samymi kolumnami i rozkładami, lecz bez ani jednego prawdziwego rekordu. Model językowy nigdy nie widzi wtedy prawdziwych klientów. Mimo to pisze dla Ciebie działający kod.

Poniżej opisujemy cały proces krok po kroku. Zaczynamy od ryzyka, potem przechodzimy do różnic między syntezą a anonimizacją, generowania zbioru w Pythonie i kontroli jego jakości. Na koniec pokazujemy, jak zlecić agentowi AI pisanie kodu na kopii, a liczby policzyć na oryginale u siebie.

Dlaczego wgrywanie firmowych danych do AI to ryzyko?

Plik wrzucony do czatu albo przekazany agentowi trafia na serwery dostawcy modelu, bo tam przetwarzane jest zapytanie. Ta sama zasada obejmuje agentów uruchomionych w terminalu na własnym komputerze. Program działa lokalnie, lecz fragmenty plików, które czyta, wysyła do chmury jako kontekst rozmowy. Jeśli tabela zawiera dane osobowe, takie przekazanie może wymagać podstawy prawnej i umowy powierzenia przetwarzania, a wewnętrzna polityka bezpieczeństwa firmy może go całkowicie zabraniać.

Lokalny model językowy omija ten problem tylko częściowo. Wymaga konfiguracji i mocnego sprzętu, a wybór ogranicza się do modeli, które obsłuży Twój komputer. Analityk zwykle nie potrzebuje jednak, żeby AI policzyło za niego wyniki. Potrzebuje działającego kodu analizy, który przeczyta, sprawdzi i uruchomi samodzielnie. Z tej obserwacji wynika cały schemat pracy opisany w tym poradniku: model dostaje strukturę danych, a obliczenia na prawdziwych rekordach wykonujesz lokalnie.

Czym dane syntetyczne różnią się od anonimizacji?

Syntetyczny zbiór powstaje z modelu statystycznego. Ten uczy się rozkładów poszczególnych kolumn oraz zależności między nimi, a potem losuje zupełnie nowe wiersze. E-maile, adresy i numery kart w takiej tabeli są wymyślone, mają jednak ten sam format, typ i zbliżony rozkład wartości co oryginał. Kod napisany pod syntetyczną kopię zadziała więc na prawdziwej tabeli bez przeróbek, bo kolumny nazywają się tak samo i przechowują te same typy danych.

Anonimizacja danych przekształca natomiast istniejące rekordy: usuwa, uogólnia albo zamienia wybrane pola. Zgodnie z motywem 26 RODO przepisy o ochronie danych nie mają zastosowania do informacji skutecznie zanonimizowanych. Dane spseudonimizowane, w których nazwisko zastąpiono identyfikatorem, nadal są danymi osobowymi. Samo usunięcie imienia czy adresu e-mail zwykle nie wystarcza, bo konkretną osobę może zdradzić połączenie pozostałych pól, np. daty pobytu, typu pokoju i kodu pocztowego.

Synteza omija część tych trudności, ponieważ żaden wiersz nie odpowiada prawdziwej osobie. Nie zwalnia to z ostrożności. Model, który zbyt wiernie odtwarza oryginał, może przenieść do kopii rzadkie i rozpoznawalne kombinacje wartości. O statusie prawnym konkretnego zbioru powinien zdecydować inspektor ochrony danych w Twojej firmie.

Jak wygenerować dane syntetyczne w Pythonie?

Popularnym narzędziem do danych tabelarycznych jest SDV (Synthetic Data Vault), otwarta biblioteka Pythona, której projekt powstał w 2016 r. w laboratorium Data to AI na MIT. Uczy się wzorców z prawdziwej tabeli i odtwarza je w nowych rekordach. Obsługuje pojedyncze tabele, kilka powiązanych tabel oraz dane sekwencyjne, a do bazy danych podłączysz ją przez osobne konektory.

Praca w SDV obejmuje pięć kroków, a właściwe generowanie danych syntetycznych jest dopiero czwartym z nich:

  1. wczytaj pliki CSV obiektem CSVHandler, który zamienia je w ramki danych pandas;
  2. wykryj metadane funkcją Metadata.detect_from_dataframes, która opisuje tabele, kolumny i typy danych;
  3. popraw błędnie rozpoznane typy metodą update_column i zatwierdź całość metodą validate;
  4. utwórz syntezator GaussianCopulaSynthesizer, przekaż mu metadane i wytrenuj go metodą fit na prawdziwej tabeli;
  5. wylosuj nowe wiersze metodą sample, podając ich liczbę, np. 100 wierszy na podstawie 2000 oryginalnych.

Najwięcej uwagi wymagają metadane. Dokumentacja SDV podaje przykład kolumny z wartościami 94102 i 94130: opisana jako liczba będzie losowana na ciągłej skali, a opisana jako kod pocztowy da poprawne kody. Podobny kłopot pojawia się z adresem rozliczeniowym. Autodetekcja może uznać go za identyfikator i wtedy w kopii zamiast ulic z numerami i kodami pojawiają się przypadkowe ciągi znaków. Zmiana typu kolumny na adres naprawia błąd przy kolejnym trenowaniu.

Jak bezpiecznie analizować poufne dane z AI dzięki danym syntetycznym?

Jak sprawdzić, czy syntetyczny zbiór nadaje się do pracy?

SDV ma dwa raporty, które odpowiadają na różne pytania. Diagnostyczny, uruchamiany funkcją run_diagnostic, sprawdza poprawność formalną: klucze główne muszą być unikalne i niepuste, wartości liczbowe mieszczą się w zakresie z oryginału, a kategorie pochodzą z tego samego zbioru. Przy domyślnych syntezatorach wynik powinien wynosić 100%. Każdy niższy wynik oznacza błąd do naprawienia.

Raport jakości z funkcji evaluate_quality mierzy podobieństwo statystyczne: kształty kolumn oraz trendy w parach kolumn. Tutaj 100% nie jest celem. Dokumentacja SDV wyjaśnia, że bardzo wysoka zgodność zależności między wieloma kolumnami naraz świadczy o tym, że syntetyczna tabela zaczyna kopiować prawdziwą. Z tego powodu raport ocenia wzorce w jednym i dwóch wymiarach, a układów trzech kolumn i więcej nie bierze pod uwagę.

Przed wysłaniem pliku przejrzyj go jeszcze raz pod kątem poufności. Nazwy kolumn i wartości kategorii, takie jak wewnętrzne taryfy czy kody projektów, też mogą stanowić tajemnicę przedsiębiorstwa. Usuń wszystkie kolumny, których nie potrzebujesz do analizy. Gdy nie badasz numerów kart, wytnij je jeszcze przed trenowaniem syntezatora. Obowiązuje prosta reguła: tyle danych, ile wymagają pytania analityczne, ani jednej kolumny więcej.

Jak zlecić analizę danych z AI, nie pokazując oryginału?

Gotowy plik syntetyczny przekazujesz agentowi, który pisze i testuje kod. W Claude Code możesz uruchomić sesję w chmurze zamiast lokalnej. Każde zadanie działa wtedy w izolowanym środowisku z ograniczeniami sieci i systemu plików, więc agent nie ma dostępu do folderu z prawdziwą tabelą na Twoim dysku. Wgrywasz wyłącznie kopię i sprawdzasz przed wysłaniem, czy wybrałeś właściwy plik.

Dobre polecenie dla agenta zawiera cztery elementy:

  • konkretne pytania analityczne, np. ile nocy trwa typowy pobyt albo które domeny e-mail dominują wśród klientów;
  • wybór narzędzi, np. notatnik Jupyter z bibliotekami pandas i Plotly;
  • prośbę o komentarze w kodzie opisujące pułapki i ostrzeżenia dotyczące jakości danych;
  • format wyniku, np. notatnik z wykresami albo prosty dashboard.

Wyniki uzyskane na kopii traktuj wyłącznie jako test kodu. W syntetycznej tabeli mogą pojawić się nielogiczne rekordy, np. data wymeldowania wcześniejsza od daty zameldowania, bo model losuje każdą z dat z jej rozkładu, bez wiedzy o prawdziwych rezerwacjach. Dobrze napisany notatnik wyłapie takie wiersze w sekcji kontroli jakości. Na oryginale ten sam filtr odrzuci ich zwykle znacznie mniej.

Ostatni etap wykonujesz u siebie. Pobierasz notatnik, zmieniasz ścieżkę na prawdziwy plik i uruchamiasz wszystkie komórki. Gdy brakuje bibliotek, poproś agenta o plik requirements.txt i zainstaluj pakiety poleceniem pip install -r requirements.txt. Przy dłuższej współpracy przydaje się prywatne repozytorium GitHub: agent wypycha do niego zmiany, a Ty pobierasz je lokalnie bez ręcznego kopiowania plików.

Zrób syntetyczną kopię jednej tabeli jeszcze dziś

Wybierz jeden zbiór, który do tej pory omijałeś przy pracy z AI z powodu poufności. Usuń z niego zbędne kolumny, wygeneruj 100–200 syntetycznych wierszy i uruchom raport diagnostyczny. Wynik 100% i neutralne nazwy kolumn oznaczają, że plik nadaje się do wysłania agentowi. Później zostaje Ci już tylko przeczytanie kodu i uruchomienie go lokalnie. Dane syntetyczne pozwalają korzystać z najmocniejszych modeli w chmurze, a prawdziwe rekordy klientów nie opuszczają Twojego dysku ani na chwilę.

FAQ

Czy dane syntetyczne podlegają RODO?

Zbiór, w którym żaden rekord nie odpowiada prawdziwej osobie i nie da się go powiązać z konkretnym człowiekiem, może zostać uznany za informację anonimową. Ocena zależy jednak od sposobu generowania i ryzyka ponownej identyfikacji. Model wytrenowany na małej próbie może odtworzyć rzadkie przypadki niemal wiernie. Sam proces trenowania syntezatora na prawdziwych danych nadal jest przetwarzaniem danych osobowych, więc trening prowadź wyłącznie na własnym komputerze.

Ile syntetycznych wierszy wystarczy do pisania kodu?

Do sprawdzenia struktury i logiki kodu zwykle wystarczy 100–200 wierszy. Tak mały plik szybko się wgrywa, a agent widzi w nim wszystkie kolumny, typy i przykładowe wartości. Większa próba, rzędu kilku tysięcy wierszy, przydaje się wtedy, gdy chcesz przetestować wydajność zapytań albo rzadkie kategorie, które w małej próbie mogą nie wystąpić ani razu.

Czy SDV obsługuje kilka powiązanych tabel?

Tak, biblioteka ma osobny tryb dla danych wielotabelowych. Metadane opisują wtedy także relacje między tabelami, np. klucz łączący gości z hotelami. Raport diagnostyczny sprawdza w tym trybie dodatkowo spójność relacji, czyli to, czy każdy klucz obcy w syntetycznej tabeli wskazuje na istniejący rekord w tabeli nadrzędnej. Dzięki temu kod ze złączeniami tabel przetestujesz na kopii tak samo jak na bazie produkcyjnej.

Podziel się