Русский
Русский
English
Статистика
Реклама

Вопросы

Перевод Как проходить собеседование на дата-сайентиста в Amazon в 2021 году

04.02.2021 18:19:53 | Автор: admin
image

Я решил написать статью для тех, кто пытается найти актуальные вопросы и ответы для собеседований в Amazon. Я взял несколько вопросов с собеседований, которые задавали в последние месяцы, и попытался дать краткие и понятные ответы на них. Есть вопросы сложные, есть простые, но в любом случае могут пригодиться и те, и другие.

В: У пары есть двое детей, и пара знает, что один из детей мальчик. Какова вероятность того, что другой ребенок будет мальчиком?

Здесь нет подвоха. Вероятность того, что один ребенок будет мальчиком, не зависит от другого, поэтому она равна 50%. Вы можете запутаться из-за вопроса Леонарда Млодинова, где ответ одна треть, но это совершенно другой вопрос, не относящийся к нашему.

В: Объясните, что такое p-значение.

Если вы погуглите, что такое p-значение, то получите такой ответ: Это вероятность получить для данной вероятностной модели распределения значений случайной величины такое же или более экстремальное значение статистики (среднего арифметического, медианы и др.), по сравнению с ранее наблюдаемым, при условии, что нулевая гипотеза верна.

Многословный ответ, по той причине, что значение p очень специфично по значению и часто понимается неправильно.

Более простое определение p-значения: Это вероятность того, что наблюдаемая статистика возникнет случайно, с учетом распределения выборки.

Альфа устанавливает стандарт того, насколько экстремальными должны быть значения, прежде чем нулевая гипотеза может быть отклонена. Значение p указывает на крайность данных.

В: Есть 4 красных и 2 синих шара, какова вероятность того, что они будут одинаковыми в двух выборах?

Ответ равен вероятности того, что оба красные, плюс вероятность того, что оба синие. Предположим, что этот вопрос без замены.

  • Вероятность 2 красных = (4/6) * (3/6) = 1/3 или 33%
  • Вероятность 2 синих = (2/6) * (1/6) = 1/18 или 5,6%

Следовательно, вероятность того, что шары будут одинаковыми, составляет примерно 38,6%.

Q: Опишите дерево, SVM и случайный лес. Расскажите об их преимуществах и недостатках.

Деревья решений: древовидная модель, используемая для моделирования решений на основе одного или нескольких условий.

Плюсы: легко реализовать, интуитивно понятно, обрабатывает пропущенные значения.
Минусы: высокая дисперсия, неточность

Плюсы: точность при большой размерности
Минусы: склонность к чрезмерной подгонке, не дает напрямую оценок вероятности

Плюсы: может достигать более высокой точности, обрабатывать отсутствующие значения, масштабирование функции не требуется, может определять важность функции.
Минусы: черный ящик, интенсивные вычисления.

Снижение размерности это процесс уменьшения количества функций в наборе данных. Это важно в основном в том случае, когда вы хотите уменьшить дисперсию своей модели (переобучение).

В Википедии говорится о четырех преимуществах уменьшения размерности:

  • Сокращает необходимое время и место для хранения.
  • Удаление мультиколлинеарности улучшает интерпретацию параметров модели машинного обучения.
  • Становится легче визуализировать данные при уменьшении до очень малых размеров, таких как 2D или 3D.
  • Избегает проклятия размерности.

Нам нужно сделать некоторые предположения по этому вопросу, прежде чем мы сможем на него ответить. Предположим, что есть два возможных места для покупки определенного товара на Amazon, и вероятность найти его в месте A составляет 0,6, а B 0,8. Вероятность найти товар на Amazon можно объяснить так:

Мы можем переформулировать вышеизложенное как P (A) = 0,6 и P (B) = 0,8. Кроме того, давайте предположим, что это независимые события, а это означает, что вероятность одного события не зависит от другого. Затем мы можем использовать формулу

P (A или B) = P (A) + P (B) P (A и B)
P (A или B) = 0,6 + 0,8 (0,6 * 0,8)
P (A или B) = 0,92

В: Если есть 8 шариков равного веса и 1 шарик, который весит немного больше (всего 9 шариков), сколько взвешиваний необходимо, чтобы определить, какой шарик самый тяжелый?



Потребуются два взвешивания (см. Части A и B выше):

Вы должны разделить девять шариков на три группы по три и взвесить две группы. Если весы уравновешиваются (вариант 1), вы знаете, что тяжелый шарик относится к третьей группе шариков. В противном случае вы возьмете группу с большим весом (вариант 2).
Затем вы выполните тот же шаг, но у вас будет три группы по одному шарику вместо трех групп по три.

Q: Что такое переобучение?

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

Q: У нас есть две модели: одна с точностью 85%, другая 82%. Какой ты выберешь?

Если нам важна лишь точность модели, то ответ 85%. Но если бы об этом спросил интервьюер, вероятно, стоит узнать, в каком контексте задан вопрос, т.е. что модель пробует предсказать. Это даст нам лучшее представление о том, действительно ли метрикой оценки должна быть точность или другая метрика, такая как recall или оценка f1.

Q: Что такое наивный байесовский алгоритм?

Наивный байесовский классификатор популярный классификатор, используемый в Data Science. Идея, лежащая в основе этого, основана на теореме Байеса:

image

Говоря простым языком, это уравнение используется для ответа на следующий вопрос. Какова вероятность y (моей выходной переменной) при X (моих входных переменных)? И из-за наивного предположения, что переменные независимы для данного класса, вы можете сказать, что:

image

Кроме того, убрав знаменатель, мы можем сказать, что P (y | X) пропорционально правой части.

image

Поэтому цель найти класс с максимальной пропорциональной вероятностью.


Q: Как изменение основного членского взноса повлияет на рынок?

Я не уверен на 100% в ответе на этот вопрос, но постараюсь сделать все возможное!

Давайте возьмем пример увеличения основного членского взноса в нем участвуют две стороны: покупатели и продавцы.

Для покупателей влияние увеличения основного членского взноса в конечном итоге зависит от эластичности спроса по цене для покупателей. Если эластичность цены высока, то данное повышение цены приведет к значительному падению спроса и наоборот. Покупатели, которые продолжают покупать членские взносы, вероятно, являются самыми лояльными и активными клиентами Amazon они также, вероятно, будут уделять больше внимания продуктам с премией.

Продавцы пострадают, так как теперь стоимость покупки корзины продуктов Amazon выше. При этом некоторые продукты пострадают сильнее, в то время как другие могут не пострадать. Вполне вероятно, что продукты премиум-класса, которые покупают самые лояльные клиенты Amazon, пострадают не так сильно, как электроника.

Спасибо за внимание!

Что мне нравится в этих собеседованиях и рассматриваемых на них проблемах, так это две вещи:
  • Они помогают вам изучить новые концепции, с которыми вы до этого не были знакомы.
  • Они открывают концепции, которые вы знаете, с новой стороны.

Надеюсь, все это поможет вам в подготовке к вашему путешествию в мир Data Science!

Комментарий к статье Вячеслава Архипова, специалиста в области Data Science AR-стартапа Banuba и консультанта по учебной программе онлайн-университета Skillbox.

Подборка вопросов охватывает широкий спектр тем, в которых должен ориентироваться дата-сайентист: теория вероятностей, статистика, машинное обучение и даже экономика. Правильные ответы на вопросы и умение рассуждать покажут ширину знаний соискателя.

Но среди этих вопросов нет ни одного со звездочкой. На этот стандартный набор вопрос ответит практически любой выпускник ВУЗа. Если бы я проводил собеседование, то добавил бы парочку вопросов, вскрывающих знание не только стандартных определений, но и тонких нюансов.

Ну например:
1) Как можно получить случайную величину с заданным распределением, имея в наличие реализацию нормальной СВ?
2) Что такое корреляция случайных величин и какова ее геометрическая интерпретация?
3) Как можно бороться с переобучением?
4) В чем преимущество метода главных компонент по сравнению, например, с процессом Грама-Шмидта?
5) Как можно улучшить классификацию, имея набор слабых классификаторов?

А так же у меня возник бы вопрос к соискателю, почему он приводит в качестве источника информации именно Википедию и по каким материалам еще он учился.
Подробнее..

50200 вопросов по JavaScript

06.07.2020 10:05:56 | Автор: admin


Доброго времени суток, друзья!

Предлагаю Вашему вниманию небольшой интерактив своего рода викторину по JavaScript, на данный момент состоящую из 50 вопросов.

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

Предисловие


Данная часть основана на этом репозитории. Его автор, Lydia Hallie, позиционирует свой проект как список продвинутых вопросов и, действительно, среди них есть такие, которые, как мне кажется, даже опытному JavaScript-разработчику покажутся непростыми. Однако среди этих вопросов есть и такие, для ответа на которые достаточно владеть базовыми знаниями. В репозитории имеется русский перевод, но, мягко говоря, он оставляет желать лучшего, поэтому большую часть ответов (объяснений) пришлось переводить заново.

Следует отметить, что приводимые пояснения (ответы) не всегда в полной мере раскрывают суть проблемы. Это объясняется формой проекта он представляет собой чеклист, а не учебник. Ответы, скорее, являются подсказкой для дальнейших поисков на MDN или Javascript.ru. Впрочем, многие из объяснений содержат исчерпывающие ответы.

Несмотря на то, что код неоднократно протестирован, никто не застрахован от ошибок, разумеется, кроме тех, кто ничего не делает. Поэтому при обнаружении ошибок, опечаток, неточностей, некорректности формулировок и т.п., а также при желании улучшить перевод, прошу писать в личку, буду признателен (активность на GitHub также приветствуется).

Собственно, это все, что я хотел сказать в качестве предисловия.

Правила


Правила простые: 50 вопросов, 3-4 варианта ответа, рейтинг: количество правильных и неправильных ответов, прогресс: номер и количество вопросов.

По результатам определяется процент правильных ответов и делается вывод об уровне владения JavaScript: больше 80% отлично, больше 50% неплохо, меньше 50% ну, Вы понимаете.

К каждому вопросу прилагается пояснение. При неправильном ответе данное пояснение раскрывается.

Благодаря тому, что количество правильных и неправильных ответов, а также порядковый номер вопроса записываются в локальное хранилище, у Вас есть возможность сделать паузу, передохнуть и в любое время продолжить с того места, на котором остановились.

Но довольно слов, пора переходить к делу.

Викторина



Код проекта находится здесь.

Механика


Несколько слов о том, как реализована викторина для тех, кому интересно.

Разметка выглядит так:

<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>200+ вопросов по JavaScript</title>    <!-- шрифт -->    <link href="http://personeltest.ru/aways/fonts.googleapis.com/css2?family=Ubuntu&display=swap" rel="stylesheet">    <!-- стили -->    <link rel="stylesheet" href="style.css">    <!-- основной скрипт с типом "модуль" -->    <script type="module" src="script.js"></script></head><body></body>

Добавляем минимальные стили.
CSS:
* {    margin: 0;    padding: 0;    box-sizing: border-box;    font-family: Ubuntu, sans-serif;    font-size: 1em;    text-align: center;    letter-spacing: 1.05px;    line-height: 1.5em;    color: #111;    user-select: none;}@media (max-width: 512px) {    * {        font-size: .95em;    }}html {    position: relative;}body {    padding: 1em;    min-height: 100vh;    background: radial-gradient(circle, skyblue, steelblue);    display: flex;    flex-direction: column;    justify-content: start;    align-items: center;}h1 {    margin: .5em;    font-size: 1.05em;}output {    margin: .5em;    display: block;}.score {    font-size: 1.25em;}form {    text-align: left;}form p {    text-align: left;    white-space: pre;}form button {    position: relative;    left: 50%;    transform: translateX(-50%);}button {    margin: 2em 0;    padding: .4em .8em;    outline: none;    border: none;    background: linear-gradient(lightgreen, darkgreen);    border-radius: 6px;    box-shadow: 0 1px 2px rgba(0, 0, 0, .4);    font-size: .95em;    cursor: pointer;    transition: .2s;}button:hover {    color: #eee;}label {    cursor: pointer;}input {    margin: 0 10px 0 2em;    cursor: pointer;}details {    font-size: .95em;    position: absolute;    bottom: 0;    left: 50%;    transform: translateX(-50%);    width: 90%;    background: #eee;    border-radius: 4px;    cursor: pointer;}details h3 {    margin: .5em;}details p {    margin: .5em 1.5em;    text-align: justify;    text-indent: 1.5em;}.right {    color: green;}.wrong {    color: red;}


Исходники (assets) представляют собой массив объектов, где каждый объект имеет свойства question (вопрос), answers (ответы), rightAnswer (правильный ответ) и explanation (объяснение):

[{    question: `        function sayHi() {            console.log(name);            console.log(age);            var name = "Lydia";            let age = 21;        }        sayHi();    `,    answers: `        A: Lydia и undefined        B: Lydia и ReferenceError        C: ReferenceError и 21        D: undefined и ReferenceError    `,    rightAnswer: `D`,    explanation: `        Внутри функции мы сначала определяем переменную name с помощью ключевого слова var. Это означает, что name поднимется в начало функции. Name будет иметь значение undefined до тех пор, пока выполнение кода не дойдет до строки, где ей присваивается значение Lydia. Мы не определили значение name, когда пытаемся вывести ее в консоль, поэтому будет выведено undefined. Переменные, определенные с помощью let (и const), также поднимаются, но в отличие от var, не инициализируются. Доступ к ним до инициализации невозможен. Это называется "временной мертвой зоной". Когда мы пытаемся обратиться к переменным до их определения, JavaScript выбрасывает исключение ReferenceError.    `},...]

Основной скрипт.
JavaScript
// импортируем массив объектов - исходникиimport assets from './assets.js'// IIFE;((D, B) => {    // заголовок - вопрос    const title = D.createElement('h1')    B.append(title)    // рейтинг: количество правильных и неправильных ответов    const score = D.createElement('output')    score.className = 'score'    B.append(score)    // прогресс: порядковый номер вопроса    const progress = D.createElement('output')    progress.className = 'progress'    B.append(progress)    // контейнер для вопроса, вариантов ответа и кнопки для отправки формы    const div = D.createElement('div')    B.append(div)    // получаем значения правильных и неправильных ответов из локального хранилища    // или присваиваем переменным 0    let rightAnswers = +localStorage.getItem('rightAnswers') || 0    let wrongAnswers = +localStorage.getItem('wrongAnswers') || 0    // получаем значение счетчика из локального хранилища    // или присваиваем ему 0    let i = +localStorage.getItem('i') || 0    // рендерим вопрос    showQuestion()    // обновляем рейтинг и прогресс    updateScoreAndProgress()    function showQuestion() {        // если значение счетчика равняется количеству вопросов        // значит, игра окончена,        // показываем результат        if (i === assets.length) {            return showResult()        }        // заголовок-вопрос зависит от значения счетчика - номера вопроса        switch (i) {            case 4:                title.textContent = `Что не является валидным?`                break;            case 9:                title.textContent = `Что произойдет?`                break;            case 12:                title.textContent = `Назовите три фазы распространения событий`                break;            case 13:                title.textContent = `Все ли объекты имеют прототипы?`                break;            case 14:                title.textContent = `Каким будет результат?`                break;            case 20:                title.textContent = `Чему равно sum?`                break;            case 21:                title.textContent = `Как долго будет доступен cool_secret?`                break;            case 23:                title.textContent = `Каким будет результат?`                break;            case 25:                title.textContent = `Глобальный контекст исполнения создает две вещи: глобальный объект и this`                break;            case 27:                title.textContent = `Каким будет результат?`                break;            case 29:                title.textContent = `Каким будет результат?`                break;            case 30:                title.textContent = `Что будет в event.target после нажатия на кнопку?`                break;            case 33:                title.textContent = `Каким будет результат?`                break;            case 34:                title.textContent = `Какие из значений являются "ложными"?`                break;            case 38:                title.textContent = `Все в JavaScript это`                break;            case 39:                title.textContent = `Каким будет результат?`                break;            case 40:                title.textContent = `Каким будет результат?`                break;            case 41:                title.textContent = `Что возвращает setInterval?`                break;            case 42:                title.textContent = `Каким будет результат?`                break;            case 42:                title.textContent = `Каково значение num?`                break;            case 49:                title.textContent = `Каким будет результат?`                break;            default:                title.textContent = `Что будет выведено в консоль?`                break;        }        // поскольку каждый элемент массива - это объект,        // мы можем его деструктурировать, получив вопрос, правильный ответ и объяснение        const {            question,            rightAnswer,            explanation        } = assets[i]        // поскольку варианты ответа - это input type="radio",        // строку необходимо преобразовать в массив (критерием является перенос строки - \n)        // первый и последний элементы - пустые строки,        // избавляемся от них с помощью slice(1, -1),        // также удаляем пробелы        const answers = assets[i].answers            .split('\n')            .slice(1, -1)            .map(i => i.trim())        // HTML-шаблон        const template = `        <form action="#">            <p><em>Вопрос:</em><br> ${question}</p>            <p><em>Варианты ответов:</em></p><br>            ${answers.reduce((html, item) => html += `<label><input type="radio" name="answer" value="${item}">${item}</label><br>`, '')}            <button type="submit">Ответить</button>        </form>        <details>            <summary>Показать правильный ответ</summary>            <section>                <h3>Правильный ответ: ${rightAnswer}</h3>                <p>${explanation}</p>            </section>        </details>`        // помещаем шаблон в контейнер        div.innerHTML = template        // находим форму        const form = div.querySelector('form')        // выбираем первый инпут        form.querySelector('input').setAttribute('checked', '')        // обрабатываем отправку формы        form.addEventListener('submit', ev => {            // предотвращаем перезагрузку страницы            ev.preventDefault()            // определяем выбранный вариант ответа            const chosenAnswer = form.querySelector('input:checked').value.substr(0, 1)            // проверяем ответ            checkAnswer(chosenAnswer, rightAnswer)        })    }    function checkAnswer(chosenAnswer, rightAnswer) {        // индикатор правильного ответа        let isRight = true        // если выбранный ответ совпадает с правильным,        // увеличиваем количество правильных ответов,        // записываем количество правильных ответов в локальное хранилище,        // иначе увеличиваем количество неправильных ответов,        // записываем количество неправильных ответов в локальное хранилище        // и присваиваем индикатору false        if (chosenAnswer === rightAnswer) {            rightAnswers++            localStorage.setItem('rightAnswers', rightAnswers)        } else {            wrongAnswers++            localStorage.setItem('wrongAnswers', wrongAnswers)            isRight = false        }        // находим кнопку        const button = div.querySelector('button')        // если ответ был правильным        if (isRight) {            // сообщаем об этом            title.innerHTML = `<h1 class="right">Верно!</h1>`            // выключаем кнопку            button.disabled = true            // через секунду вызываем функции            // обновления рейтинга и прогресса и рендеринга следующего вопроса            // отключаем таймер            const timer = setTimeout(() => {                updateScoreAndProgress()                showQuestion()                clearTimeout(timer)            }, 1000)            // если ответ был неправильным        } else {            // сообщаем об этом            title.innerHTML = `<h1 class="wrong">Неверно!</h1>`            // выключаем инпуты            div.querySelectorAll('input').forEach(input => input.disabled = true)            // раскрываем объяснение            div.querySelector('details').setAttribute('open', '')            // меняем текст кнопки            button.textContent = 'Понятно'            // по клику на кнопке вызываем функции            // обновления рейтинга и прогресса и рендеринга следующего вопроса            // удаляем обработчик            button.addEventListener('click', () => {                updateScoreAndProgress()                showQuestion()            }, {                once: true            })        }        // увеличиваем значение счетчика        i++        // записываем значение счетчика в локальное хранилище        localStorage.setItem('i', i)    }    function updateScoreAndProgress() {        // обновляем рейтинг        score.innerHTML = `<span class="right">${rightAnswers}</span> - <span class="wrong">${wrongAnswers}</span>`        // обновляем прогресс        progress.innerHTML = `${i + 1} / ${assets.length}`    }    function showResult() {        // определяем процент правильных ответов        const percent = (rightAnswers / assets.length * 100).toFixed()        // объявляем переменную для результата        let result        // в зависимости от процента правильных ответов        // присваиваем result соответствующее значение        if (percent >= 80) {            result = `Отличный результат! Вы прекрасно знаете JavaScript.`        } else if (percent > 50) {            result = `Неплохой результат, но есть к чему стремиться.`        } else {            result = `Вероятно, вы только начали изучать JavaScript.`        }        // рендерим результаты        B.innerHTML = `        <h1>Ваш результат</h1>        <div>            <p>Правильных ответов: <span class="right">${rightAnswers}</span></p>            <p>Неправильных ответов: <span class="wrong">${wrongAnswers}</span></p>            <p>Процент правильных ответов: ${percent}</p>            <p>${result}</p>            <button>Заново</button>        </div>        `        // при нажатии на кнопку        // очищаем хранилище        // и перезагружаем страницу,        // удаляем обработчик        B.querySelector('button').addEventListener('click', () => {            localStorage.clear()            location.reload()        }, {            once: true        })    }})(document, document.body)


Благодарю за внимание, друзья.

Продолжение следует
Подробнее..

Изучаем React 300 вопросов для подготовки к собеседованию

21.01.2021 08:19:12 | Автор: admin


Доброго времени суток, друзья!

Представляю вашему вниманию первую версию репозитория с большим количеством вопросов (с ответами, разумеется) по React и связанным с ним технологиям. А много это сколько? Это 322.

Почему первая версия? Потому что будет еще и вторая, примерно с таким же количеством вопросом, но с более развернутыми ответами. Когда? Надеюсь, что скоро. Зачем нужны две версии? Ну, во-первых, повторенье etc во-вторых, одни приветствуют лаконичность, другие жаждут подробностей.

Текущая версия является адаптированным, исправленным и дополненным переводом этого репозитория.

Вопросник включает в себя следующие разделы:

  • Ключевые концепции React
  • React Router
  • Интернационализация в React
  • Тестирование в React
  • React Redux
  • React Native
  • Библиотеки для React
  • Разное (много разного, включая хуки)


Он не претендует на роль полноценного и исчерпывающего источника информации о React и не избавляет от необходимости изучения официальной литературы, но может послужить хорошей отправной точкой для погружения в экосистему самой популярной и динамично развивающейся на сегодняшний день JavaScript-библиотеки для разработки пользовательских интерфейсов.

Планируется, что со временем репозиторий превратится в хороший русскоязычный ресурс по изучению React и наиболее популярных инструментов, предназначенных для работы с ним (решил сделать 2021 год годом React и TypeScript). В ближайшее время в нем появятся краткие руководства по Create React App, стилям в React, включая Styled Components, и React Router. Постепенно ресурс обретет формат прогрессивного веб и, возможно, мобильного приложения.

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

Благодарю за внимание и хорошего дня.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru