Що питають у бізнес-аналітиків на співбесіді у Amazon

Що питають у бізнес-аналітиків на співбесіді у Amazon

Відточуйте свої навички написання SQL запитів, щоб підвищити шанси отримати роботу в Amazon, якщо у вас є така мрія. У цій статті ми обговоримо, як бізнес-аналітики вписуються в організаційну структуру Amazon.

Amazon щодня транспортує більше мільйона покупок. Навіть невеликі поліпшення ефективності логістичних та бізнес операцій можуть заощадити мільйони доларів. Бізнес-аналітики можуть аналізувати точні дані, осмислювати їх значення та повідомляти свої висновки особам, які приймають рішення у компанії.

Обов’язки бізнес-аналітика в Amazon 

Бізнес-аналітики в Amazon працюють з даними, щоб сформувати розуміння про бізнес-операції, логістику, поведінку клієнтів і звички, і використовувати їх для збільшення прибутку. Зробити це можна двома способами: скоротити зайві витрати і збільшити доходи.

Amazon, як і інші технологічні підприємства сьогодні, збирає великі обсяги даних користувачів. Бізнес-аналітики збільшують доходи завдяки виявленню шляхів збільшення витрат користувачів. Також, аналіз даних є одним з найбезпечніших способів розпізнати та усунути неефективність всередині організації.

Хід співбесіди на цю роль відображає обов’язки бізнес-аналітика в Amazon. Кандидати повинні продемонструвати сильні знання бізнесу та вміння працювати з даними. Написання запитів SQL є одним з повсякденних завдань бізнес-аналітиків. Потенційні БА повинні відповідати на питання, починаючи від бізнес-кейсів до реальних SQL задач. Питання з SQL зазвичай стосуються бізнес-процесів, усунення недоліків і збільшення доходів.

Аналіз даних є лише частиною роботи БА. Одним з їхніх основних обов’язків є спілкування зі стейкхолдерами.

Кого саме шукають інтерв’юери з Amazon?  

Бізнес-аналітики виконують багато роботи в SQL, тому інтерв’юери очікують сильного володіння цією мовою. На відміну від інших спеціальностей науки про дані, бізнес-аналітикам зазвичай не потрібно більше, ніж базові знання Python. В свою чергу, це також допомагає добре розуміти Excel. Здатніть зосереджуватись на завданні і виявляти закономірності в даних також може допомогти вам досягти успіху в роботі. Такі навички важко виміряти, тому інтерв’юери зазвичай спостерігають за кандидатами в процесі відповіді на питання.

Потенційні кандидати на роль бізнес-аналітика також повинні показати глибокі знання бізнесу. Здатність аналізувати і агрегувати дані важлива, але недостатня, якщо ви не можете зрозуміти їх практичне застосування і зробити правильні висновки в бізнес-контексті. Для загального уявлення про нетехнічні питання під час таких інтерв’ю, прочитайте загальну статтю про Business Analyst Interview Questions.

Культура в Amazon зосереджена на поліпшенні досвіду клієнтів і трансформуванні веб-сайту у найбільш зручний для покупок в Інтернеті. Те ж саме зосередження уваги на поліпшенні клієнтського досвіду може допомогти вам отримати роботу в Amazon.

Підхід до вирішення завдань на співбесіді на роль бізнес-аналітика в Amazon  

1.Зрозумійте запитання

Найкращий підхід до SQL-завдання – уважно прочитати опис. Особливо, якщо в питанні багато понять і умов. Нові питання можуть спочатку заплутати. Читайте їх кілька разів, щоб залишитися на правильному шляху. Деякі питання – зрозумілі і конкретні. Інші є широкими і відкритими для інтерпретації. Якщо запитання – незрозумілі хоча б чимось, краще попросити інтерв’юера конкретизувати. Питання часто вводять такі поняття, як «унікальний користувач» або операції, такі як «обчисліть щомісячну різницю в продажах». Деякі питання мають конкретні визначення для цих понять і завдань, а інші – ні. Часто опис завдання також визначає, як організувати дані до того як їх передати, як форматувати результати або подібні питання.

  1. Проаналізуйте дані

Огляд наявних вхідних даних є другим за важливістю кроком до вирішення задачі з SQL. Якщо вам пощастить, доступні дані будуть міститися в одній таблиці, але це не завжди так. Деякі питання мають кілька таблиць і кожна може мати більше десятка стовпців. Важливо розробити методичний підхід, щоб легко зрозуміти доступні дані. Перший крок полягає в тому, щоб подивитися на значення, згадані в описі питання, і визначити, які таблиці і стовпці містять їх. Аналіз типів даних кожного стовпця може бути корисним. Це може допомогти вам вирішити, чи потрібно вам вводити або форматувати значення. Часто це стосується значень дат, які потрібно відформатувати або перетворити на текстові значення. Також важлива унікальність і обмеження кожного значення в даних. Тому варто дивитися на актуальні дані.

  1. Сплануйте свій підхід

Щойно ви зрозумієте запитання і вхідні дані, переходьте до викладення логічних кроків для пошуку рішення. Написання плану може допомогти вам зосередитися на вирішенні проблеми. Ви можете почати з найраціональнішого підходу, і врешті-решт ви можете придумати поліпшення оригінальної ідеї. Записані логічні кроки легко відслідкувати, коли ви письмово викладаєте запит.  Звичка планувати свій підхід може бути дуже корисною. Це можливість продемонструвати своє мислення під час інтерв’ю. Розробка декількох підходів до вирішення задачі може свідчити про рівень ваших SQL навичок та загальної кмітливості як фахівця з аналізу даних (data scientist). Ці кроки повинні описати, які операції (перетворення даних, множення, ділення, форматування) ви збираєтесь виконати, щоб перейти від початкових даних до кінцевої відповіді. Вам не потрібно писати певний код для кожного кроку, але ви можете писати псевдокод або посилатися на функції SQL, які ви будете використовувати при написанні фактичного коду.

  1. Напишіть код

Перетворіть логічну схему у коректний SQL запит. Почніть із базового запиту і поступово ускладнюйте його. Наприклад, якщо вам потрібно відфільтрувати значення в певному стовпці, спочатку виберіть (за допомогою SELECT) всі значення зі стовпця. Поступово додайте умови фільтрації, правила форматування, агрегації тощо. Перевірте результат вашого запиту коли додасте ці складні функції. Таким чином, ви будете знати, що працює і чи матиме додатковий код бажаний ефект. Ви також можете виявити проблеми в коді і легко виправити їх.

Питання # 1 бізнес-аналітику на співбесіді у Amazon: Знайти кількість клієнтів, які не розмістили замовлення

Одне з повсякденних завдань бізнес-аналітиків – зрозуміти поведінку клієнтів. У цій ролі, можливо, доведеться аналізувати поведінку користувачів, які не зробили замовлення. Можливо, потрібно зрозуміти, чому вони не розмістили замовлення. Або як співробітники Amazon можуть заохочувати користувачів замовляти більше.  Аналіз поведінки користувачів є одним із секретів успіху Amazon. З цієї причини розпочніми список потенційних питань на інтерв’ю саме з SQL виклику.

Зрозумійте запитання 

Питання здається досить простим і зрозумілим, що потрібно робити кандидатам. Воно позначене як питання із «Середньою» складністю на платформі StrataScratch.  Для цього запитання із співбесіди бізнес-аналітика в Amazon, ми повинні працювати з двома таблицями – одна, яка містить інформацію про замовлення, а інша, яка містить інформацію про клієнтів. Здається логічним, що для того, щоб знайти відповідь, нам доведеться перехресно перевірити дві таблиці, щоб отримати відповідь.
Без зайвих слів почнемо.

Проаналізуйте дані

Як вже згадувалося раніше, ми можемо витягти всю необхідну інформацію з двох таблиць. Для початку розглянемо таблицю замовлень:

Дані можна легше зрозуміти, якщо ми подивимося на фактичну таблицю:

Давайте розглянемо кожну колонку:

  • Стовпчик id містить унікальне ціле значення для ідентифікації кожного замовлення.
  • Стовпчик cust_id містить ціле значення для ідентифікації клієнта, який створює замовлення. Оскільки питання задається для пошуку клієнтів без замовлень, нам доведеться знайти користувачів, які відсутні в цій колонці.

У реальному житті один клієнт може розмістити кілька замовлень. cust_id значення описує відношення багатьох замовлень до одного клієнта, тому вони не обов’язково унікальні.

  • У питанні нічого не згадується про хронологію замовлень, тому значення в стовпці order_date можна сміливо ігнорувати.
  • Також у запитанні нас не просять знайти те, що замовив клієнт, тому стовпчик order_details можна ігнорувати.
  • Ми не повинні розраховувати обсяг замовлень для кожного користувача. Також не потрібно відстежувати значення у стовпчику total_order_cost.

Таблиця customers є ще одним важливим елементом головоломки:

Тепер, коли ми знаємо про стовпці та типи значень, що містяться в них, давайте подивимося на саму таблицю:

Давайте розглянемо кожну колонку:

  • Стовпчик id містить унікальне ціле значення для ідентифікації кожного клієнта. Кожен рядок описує лише одного клієнта, тому значення id унікальні.

По суті, у нас є список всіх користувачів, незалежно від того, чи розмістили вони замовлення. Ми повинні розглянути цей список з cust_id стовпцем в таблиці orders.

  • В запитанні нас не просять ідентифікувати користувачів за їх повними іменами. Тому ми можемо ігнорувати значення в first_name, last_name стовпцях.
  • Локація клієнта нас не цікавить, тому ми можемо ігнорувати значення city та address колонок.
  • Нам також не потрібна контактна інформація користувача, що міститься в колонці phone_number.

По-перше, нам потрібно визначити важливі колони. У цьому випадку це буде стовпець id в таблиці клієнтів і стовпець cust_id в таблиці замовлень.

Поширеною помилкою є вибір (за допомогою SELECT) стовпця id з таблиці замовлень. Нам потрібен стовпець cust_id, тому що в цій таблиці стовпець id ідентифікує замовлення, а не клієнтів. Аналізуючи дані, стає очевидним, що кожне замовлення пов’язане з клієнтом. Іноді існує кілька замовлень для одного клієнта, але немає замовлення без cust_id значення, яке визначає, хто розмістив замовлення.

Плануйте свій підхід до задачі

1.Об’єднайте дані з двох таблиць

У цьому випадку очевидним вибором є використання JOIN для об’єднання даних з двох таблиць. Ми повинні тільки вибрати правильний тип JOIN. Для того, щоб виконати JOIN, нам потрібно визначити спільний стовпчик – ідентичність клієнта. У таблиці замовлень ідентифікатори клієнтів знаходяться в стовпці cust_id. У таблиці клієнтів ці значення зберігаються в стовпці id. В запитанні вказано знайти кількість клієнтів, які відповідають певним критеріям. Перша таблиця – це orders, а друга – customers. Ми використовуємо RIGHT OUTER JOIN, щоб переконатися, що ідентифікатори клієнта з другої таблиці, які відсутні в першій таблиці, не видаляються. Спільний стовпчик між двома таблицями – це ідентифікація клієнта. У таблиці customers ці значення зберігаються в стовпці id. У таблиці orders вони зберігаються в стовпці cust_id.

  1. 2.Відфільтруйте (записи) дані, щоб знайти користувачів без замовлень
    Далі потрібно знайти приклади, коли немає замовлень у конкретного замовника. Іншими словами,id клієнта не можна знайти в cust_id графі будь-якого замовлення. Ми виконуємо JOIN, але немає гарантії, що кожне значення в id стовпці таблиці клієнтів з’явиться в cust_id стовпці таблиці замовлень. У випадках, коли немає відповідності, стовпчик cust_id буде NULL. На цьому етапі у нас є список всіх клієнтів з відповідними замовленнями. Ми можемо використовувати  команду WHERE, щоб отримати тільки користувачів без замовлень.
  2. Отримайте кількість рядків у відфільтрованому результаті

Після того, як у нас є всі записи, які не мають cust_id значення, ми майже отримали відповідь. Останнім кроком є використання агрегатної функції COUNT () для отримання кількості відфільтрованих рядків. Це кількість клієнтів без замовлень.

  1. Виведіть результат і перейменуйте стовпчик

Це гарна практика використовувати ключове слово AS, щоб надати стовпцю виводу більш описової назви.

Напишіть код

1.Об’єднайте дані з двох таблиць

SELECT *
FROM orders o
RIGHT OUTER JOIN customers c ON o.cust_id = c.id
  1. Відфільтруйте записи щоб знайти користувачів без замовлень
SELECT *
FROM orders o
RIGHT OUTER JOIN customers c ON o.cust_id = c.id
WHERE o.cust_id IS NULL
  1. Отримайте кількість рідків у відфільтрованому стані
SELECT COUNT(*)
FROM orders o
RIGHT OUTER JOIN customers c ON o.cust_id = c.id
WHERE o.cust_id IS NULL
  1. Виведіть результат та перейменуйте колонку
SELECT COUNT(*) AS n_customers_without_orders
FROM orders o
RIGHT OUTER JOIN customers c ON o.cust_id = c.id
WHERE o.cust_id IS NULL

Досвідчені розробники SQL іноді змінюють порядок таблиць, щоб використовувати LEFT JOIN замість RIGHT OUTER JOIN.

Спробуйте вирішити цю задачу, використовуючи LEFT JOIN, якщо ви готові до цього виклику.

Питання # 2 бізнес-аналітику на співбесіді у Amazon: Знайти відділи з менш ніж 5-ма співробітниками 

Бізнес-аналітикам іноді необхідно виявити структурні недоліки в організації. З цієї причини інтерв’юери Amazon можуть попросити їх вирішити це питання, де кандидати повинні знайти відділи з певною кількістю працівників.

Зрозумійте запитання

Щоб відповісти на це запитання із співбесіди бізнес – аналітика у Аmazon, кандидат повинен знайти кількість працівників для кожного відділу, а потім відфільтрувати список відповідно до критеріїв. Підсумковий результат містить лише дві колонки – відділ і відповідну кількість працівників.

Проаналізуйте дані

Вся інформація, необхідна для вирішення цього питання, міститься в одній таблиці worker. Ось модель таблиці:

У нас є шість стовпчиків з різними типами значень. Крім того, звертайте увагу на типи значень, оскільки це допомагає аналізувати фактичні дані в таблиці:

Перейдемо до значень у кожному стовпчику:

  • Стовпчик worker_id містить унікальне ціле значення для ідентифікації кожного співробітника. Ми будемо використовувати ці значення для розрахунку кількості співробітників для кожного відділу.
  • Ми не повинні використовувати значення в стовпцях first_name і last_name для ідентифікації кожного користувача. Можуть бути співробітники з однаковими іменами, тому краще використовувати унікальні worker_id значення для їх ідентифікації. З цієї причини ці значення можна ігнорувати.
  • Нас не питають про компенсацію. Тому графу зарплати можна ігнорувати.
  • Кандидати не повинні хронологічно відстежувати дату приєднання кожного співробітника. Нам не потрібно працювати зі значеннями в стовпці joining_date.
  • Нарешті, у графі відділу міститься інформація про робоче місце кожного працівника. В питанні нас просять отримати інформацію про відділ разом з кількістю співробітників.

Найважливішими стовпцями в таблиці працівників є worker_id і department. Ми повинні отримати кількість співробітників для кожного відділу. Найбезпечніший підхід до отримання кількості співробітників – підрахувати унікальні user_id значення для кожного відділу.

Сплануйте свій підхід 
1. ОБЕРІТЬ дані для роботи ( за допомогою SELECT) 

Нам потрібно написати команду SELECT department і worker_id стовпців з таблиці worker. Це дасть нам список співробітників і місце їх роботи.

У нас немає кількості співробітників в окремій колонці. Нам потрібно буде знайти загальну кількість працівників якимось іншим способом.

  1. Підсумуйте кількість працівників для кожного відділу

Ми можемо отримати кількість працівників за допомогою сукупної функції count () aggregate function з worker_id значень. Ми повинні використовувати команду GROUP BY для виведення загальної кількості працівників для кожного відділу.

За замовчуванням агрегатна функція count () надає стовпчикам загальну назву count. Ми можемо використовувати ключове слово AS, щоб дати колонці більш описову назву. На цьому етапі ми повинні мати тільки унікальні значення для department і кількість співробітників для кожного з них.

  1. Відфільтруйтевідділиз більш ніж 5-ма працівниками

Ми не можемо використовувати команду WHERE для фільтрації результату агрегатних функцій. Розробники SQL використовують параметр HAVING (), щоб відкинути відділи, які не відповідають критеріям. При цьому умовою є те, що в кожному відділі повинно бути більше 5 співробітників.

Напишіть код

1.Оберіть дані за допомогою SELECT  

SELECT 
    department,
    worker_id
FROM worker
  1. Підсумуйте кількість працівників для кожного відділу
SELECT department,
       count(worker_id) AS num_of_workers
FROM worker
GROUP BY department
  1. Відфільтруйте відділи, в яких більше 5 працівників
SELECT department,
       count(worker_id) AS num_of_workers
FROM worker
GROUP BY department
HAVING count(worker_id) < 5

Питання №3 бізнес-аналітику на співбесіді у Amazon: працівники з найбільшою заробітною платнею 

Щоб вирішити таке питання «середньої» складності, кандидати повинні проаналізувати дані в таблиці працівників. Вона містить інформацію про зарплату працівників та їх відділ.

Зрозумійте запитання 

Завдання досить просте – у нас є інформація про працівників, їхню зарплату і відділ, до якого вони належать. Ми повинні знайти найвищий заробіток для кожного відділу. Опис питання також визначає, які значення потрібно отримати. Ви повинні вирішити, як врахувати крайній (поодинокий) випадок, коли кілька співробітників, що працюють в одному відділі, мають однаково найвищу зарплату. Швидше за все, ви повинні отримати інформацію про всіх з них, але ви можете уточнити це з інтерв’юером.

Проаналізуйте дані 

Потенційні бізнес-аналітики повинні написати SQL-запит для роботи з даними в таблиці WORKERS. Це таблиця з питання 2. Однак в цьому випадку ми будемо працювати з різними значеннями, щоб отримати остаточну відповідь:

Давайте ще раз розглянемо конкретний приклад (доступних) вхідних даних:

Перейдемо до стовпчиків у таблиці: 

Для цього питання, нам не потрібно відстежувати значення в стовпчику worker_id. Ми просто повинні знайти рядок з найвищою зарплатою і введеним значенням в його first_name графі. Наш кінцевий результат включає в себе first_name значення осіб, які ми визначаємо як ті, що мають найвищу зарплату в кожному відділі. Таким чином, ми повинні вибрати (за допомогою SELECT) значення з цього стовпця. Нам взагалі не потрібно працювати з last_name значеннями. Тому цей стовпчик можна ігнорувати.

Для вирішення цього питання кандидатам необхідно знайти співробітників з найвищою зарплатою для кожного відділу. Тому ми повинні визначити окремі групи працівників, виходячи з їх місця роботи, і знайти найвищу зарплату для кожної групи. Дата найму кожного співробітника не важлива, тому joining_date колонка може бути проігнорована. Ми повинні знайти найбільшу зарплату в кожному відділі. Отже, нам доведеться шукати кілька працівників, які мають однакове значення у колонці department, і виводити того, який має найвищу зарплату.

Для того, щоб відповісти на це питання з співбесіди бізнес-аналітика у Amazon, потрібно буде працювати з колонками salary та department. Зрештою, відповідь повинна включати відповідне first_name значення працівника.

Сплануйте свій підхід 

  1. Знайдіть найбільшу зарплату серед працівників у кожному відділі

Щойно ви проаналізуєте дані, стане зрозуміло, що є багато працівників, закріплених лише за кількома відділами. Нам потрібно відокремити працівників на базі того відділу, де вони працюють, і знайти в кожній групі працівника з найвищим заробітком. Для цього, швидше за все, ми будемо використовувати агрегатну функцію MAX (), а також команду GROUP BY, щоб помістити їх в окремі групи.

  1. Об’єднайте дані з основної і тимчасової таблиць

Щоб отримати доступ до значень у всіх стовпчиках, нам потрібно створити тимчасову таблицю, яка містить працівників з найбільшим заробітком. Тоді ми повинні приєднати (за допомогою JOIN) до неї основну таблицю, щоб отримати доступ до всіх значень з обох таблиць. Ми можемо виконати INNER JOIN, щоб відсіяти записи працівників, у яких немає найбільшого заробітку. Для цього нам потрібно вказати спільний стовпчик за допомогою оператора ON. Команди INNER JOIN зробить все інше.

  1. Виведіть значення в три колонки

Основна причина, чому ми об’єднуємо (за допомогою JOIN) тимчасову таблицю із основною таблицею, щоб мати доступ до всіх стовпців основної таблиці. Питання в тому, щоб ми знайшли людей з найвищими зарплатами в кожному відділі, із вихідними значеннями в колонках salary, department and first_name.

Напишіть код 

  1. Знайдіть найбільшу зарплату серед працівників у кожному відділі
SELECT 
      max(salary) AS TotalSalary,
      department 
FROM worker 
GROUP BY department
  1. Об’єднайте дані з двох таблиць
SELECT *
FROM
  (SELECT max(salary) AS TotalSalary,
          department
   FROM worker
   GROUP BY department) AS TempNew
INNER JOIN worker t ON TempNew.department = t.department
AND TempNew.TotalSalary = t.salary
  1. Виведіть значення в три колонки 
SELECT t.department,
       t.first_name,
       t.salary
FROM
  (SELECT max(salary) AS TotalSalary,
          department
   FROM worker
   GROUP BY department) AS TempNew
INNER JOIN worker t ON TempNew.department = t.department
AND TempNew.TotalSalary = t.salary

Висновок   

Роль бізнес-аналітика є унікальною, оскільки вона вимагає як технічної так і бізнесової експертизи, які однаково важливі. Щоб отримати роботу, кандидатам часто дають вирішити SQL завдання. Здатність писати SQL запити вплине на їх шанси успішно працевлаштуватись. У цій статті ми обговорили лише три питання з інтерв’ю на позицію БА в Amazon. Ви можете вивчити інші питання SQL на StrataScratch, платформі, де дата аналітики будь-якого рівня можуть практикувати та вдосконалювати свої навички SQL.

Оригінальна стаття – Amazon Business Analyst Interview Questions, переклад – Марія Самарська, ревью –  Олександра Серебрянська (Business Analysis Community Kyiv). Зображення від автора оригінальної статті, головне зображення створене за допомогою DALL-E в ChatGPT.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Повідомити про помилку

Текст, який буде надіслано нашим редакторам: