Искусственный интеллект VS Аналитик

Проверяю насколько хорошо разные AI смогут выполнить мои рабочие ad-hoc-и

Искусственный интеллект VS Аналитик

Перед прочтением этого поста рекомендую подписаться на мой блог в тг 👉подписаться. Рассказываю о пути аналитика, делюсь фишками в трудоустройстве и практическими материалами для работы.

За последние пол года много раз использовала Chat GPT и прочие аналоги для решения собственных рабочих задач.

Когда речь касается простого запроса по типу "я забыл - напомни", то все идет очень даже хорошо. AI-шки быстро генерируют ответ на запрос с довольно хорошей точностью. Проблем с генерацией простых SQL - скриптов также не возникает. А вот более сложные запросы с оконками, подзапросами и т.п. могут привести к неверному решению, которое AI исправит не сразу 🤨

Смотрим примеры простых запросов и ответов от ИИ

  • Напиши скрипт для создания простой таблицы с помощью PostgreSQL
CREATE TABLE users ( user_id SERIAL PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) );
  • Напиши скрипт с объединением таблиц
SELECT orders.order_id, orders.order_date, customers.customer_name FROM orders JOIN customers ON orders.customer_id = customers.customer_id;
  • Создай скрипт с объединением таблиц. В этом запросе также примени OVER и CASE + обобщенные табличные выражения.
WITH ranked_orders AS ( SELECT order_id, customer_id, order_date, total_amount, RANK() OVER (PARTITION BY customer_id ORDER BY order_date) AS order_rank FROM orders ), customer_info AS ( SELECT customer_id, customer_name, country FROM customers ) SELECT r.order_id, r.customer_id, c.customer_name, c.country, r.order_date, r.total_amount, CASE WHEN r.order_rank = 1 THEN 'First Order' WHEN r.order_rank = 2 THEN 'Second Order' ELSE 'Multiple Orders' END AS order_rank_description FROM ranked_orders r JOIN customer_info c ON r.customer_id = c.customer_id;

Как видим, простые запросы не вызывают никаких проблем. Ответы выдаются легко и непринужденно, а главное - они работают правильно 👍🏼

Переходим на более сложный (для ИИ) пример запроса

  • Создай таблицу в postgresql из 5-и столбцов (check id; customer id; date; value; cashback).
    Внеси 100 строк рандомных данных.
    check_id - только уникальные значения.
    customer_id могут повторяться.
    date - формат даты со временем, данные не повторяются, данные в диапазоне от 2024-01-01 до 2024-02-01.
    value - не могут быть менее 1 и более 100000.
    cashback - не более 2 % от value.
-- Удаляем таблицу, если она существует DROP TABLE IF EXISTS transactions; -- Создание таблицы CREATE TABLE transactions ( check_id SERIAL PRIMARY KEY, customer_id INTEGER, transaction_date TIMESTAMP, value NUMERIC(10, 2), cashback NUMERIC(10, 2) ); -- Вставка случайных данных INSERT INTO transactions (customer_id, transaction_date, value, cashback) SELECT (random() * 20)::INTEGER + 1, -- customer_id от 1 до 20 timestamp '2024-01-01 00:00:00' + random() * (timestamp '2024-02-01 23:59:59' - timestamp '2024-01-01 00:00:00'),-- случайная дата и время (random() * 99999 + 1)::NUMERIC(10, 2), -- value от 1 до 100000 ((random() * 2 / 100) * (random() * 99999 + 1))::NUMERIC(10, 2) -- cashback не более 2% от value FROM generate_series(1, 100);

Все бы хорошо, но есть существенные упущения

1) cashback формируется рандомно, привязки к value нет, поэтому значения могут быть больше, чем 2 %. А это нам не подходит!

2) Во время вставки данных потерялся один столбец 😥

3) Ну и не так назван столбец 'date' при создании таблицы

Для достижения верного результата пришлось дважды указывать на ошибки, после чего был получен верный ответ.

DROP TABLE IF EXISTS transactions; -- Создание таблицы CREATE TABLE transactions ( check_id SERIAL PRIMARY KEY, customer_id INTEGER, date TIMESTAMP, value NUMERIC(10, 2), cashback NUMERIC(10, 2) ); INSERT INTO transactions (check_id, customer_id, date, value, cashback) select row_number() over() as check_id, customer_id, date, value, (value * (random() * 0.02))::NUMERIC(10, 2) AS cashback FROM ( select (random() * 20)::INTEGER + 1 AS customer_id, -- customer_id от 1 до 20 timestamp '2024-01-01 00:00:00' + random() * (timestamp '2024-02-01 23:59:59' - timestamp '2024-01-01 00:00:00') AS date, -- случайная дата и время (random() * 99999 + 1)::NUMERIC(10, 2) AS value -- value от 1 до 100000 FROM generate_series(1, 100) ) AS subquery;

Итог

Далеко только на искусственном интеллекте не уедешь. Все равно нужен контроль и доработки в ситуациях со сложными запросами.

Так что учить SQL и прочие языки в первую очередь нужно самим 🙃

Если вы только недавно начали свой путь в профессии аналитика данных, тогда вам точно нужно подписаться на мой блог, где вы узнаете:

- о частых ошибках в профессии и как их избежать;

- рекомендации по трудоустройству;

- как получить профессию аналитика и сколько можно зарабатывать;

Подписывайтесь и читайте контент по ссылке 👇🏻

11
Начать дискуссию