git конспект

Вот отсюда https://ru.hexlet.io/courses/intro_to_git/lessons/intro/theory_unit

sudo apt install git
git config —global user.name «Sergei Makarov»
git config —global user.email «s.makarov@petrovich.ru»

mkdir example
cd example/
cat .git/config

touch README.md # Создаем файл
echo ‘# Hi’ > README.md # Меняем содержимое

# Первая git add подготавливает измененный или добавленный файл к коммиту. Без её выполнения сделать коммит не получится.
git add README.md # Так гит увидит новый файл

#А вот команда git commit непосредственно фиксирует изменения в репозитории
git commit -m ‘init project’ # Коммит с сообщением ‘init project’

#История коммитов
git log

# И просмотр изменений
git show 97d07816c757f3d548bddeb9acd5eddb824b3f3b

Если перед коммитов сделать git status

On branch master
Your branch is up-to-date with ‘origin/master’.
Changes to be committed: # Изменения попадающие в следующий коммит

new file: .editorconfig
modified: Dockerfile

Changes not staged for commit: # Изменения которые не попадут в коммит

modified: docker-compose.yml
deleted: rebar.lock

Untracked files: # Неотслеживаемые файлы

Procfile
Untracked – это новый файл, который не был добавлен для отслеживания командой git add. Все остальные файлы являются tracked.

С непривычки такое поведение может показаться странным. Почему бы сразу не давать возможность коммитить, без необходимости добавлять файл в отслеживаемые?
На самом деле такое поведение очень важно. Как вы убедитесь в своей практике, множество инструментов генерирует свои файлы (например, редакторы, операционная система, пакетные менеджеры), а запуск программ порождает файлы с логами и другие артефакты. И если бы git commit автоматически включал все новые файлы, в репозиторий после коммитов постоянно попадали бы ненужные данные.

Про tracked файлы

С unmodified все просто. Если файл в рабочей копии точно такой же как и в репозитории, то считается что его не модифицировали. Любой файл после коммита переходит в состояние unmodified.
Modified тоже интуитивно понятен. Как только мы изменили любой файл, он автоматически становится modified.
Но в коммит попадут только staged файлы, это те к кторым мы применили git add

git reset path/to/file переводит файл из состояния staged в modified
git checkout path/to/file переводит файл из состояния modified в unmodified, то есть по сути эта команда сбрасывает изменения.

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

git branch показывает в какой ветке работаю

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

example$ git init
example$ cd /tmp
git clone ~/example

Давайте теперь посмотрим главное — то, как отправлять изменения:
example$ echo ‘# Hello’ > README.md
example$ git commit -am ‘replace readme’
example$ git push

Как я скачал через GIT mlcourse

  1. Скопировал репрезиторий с гита. Т.е. я зашел на https://github.com/Yorko/mlcourse_open и нажал fork
  2. Зашел к себе на машину и установил гит
    sudo apt install git
    git config —global user.name «Sergei Makarov»
    git config —global user.email «s.makarov@petrovich.ru»
  3. создал папку где хочу видеть файлы курса
    mkdir Git
  4. Теперь пробуем скопировать с помощью команды git clone, но гит не даст этого сделать так как у нас нет доступа.
  5. Чтобы выдать нам доступ нужно сделать ssh ключ и привязать его к гиту:
    cd ~/.ssh
    ssh-keygen (тут мы генерим ключ и пароль к нему)
    cat ~/.ssh/id_rsa.pub (вот отсюда забираем ключ и копируем его в GIT)
    Подробнее тут
  6. Еще раз запускаем git clone git@github.com:SergeiMakarovWeb/mlcourse_open.git и начинается скачка файла
  7. Теперь нужно установить анаконду, чтобы манипулировать файлами
    Анаконду устанавливаем по этому туториалу https://www.digitalocean.com/community/tutorials/how-to-install-the-anaconda-python-distribution-on-ubuntu-16-04
    а юпитер по этому https://www.digitalocean.com/community/tutorials/how-to-set-up-a-jupyter-notebook-to-run-ipython-on-ubuntu-16-04
  8. Все готово!

Атрибуция

Новых считаем по первому клику, старых — как хотите. Для новых реально важен первый канал, откуда он приплыл

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

Только в пределах выбранной модели атрибуции, в итоге все равно всегда есть погрешность ) Я к атрибуции отнушусь больше как к теории, потому что для разных источников и задач — разная атрибуция. Вполне очевидно что контекст интересен как источник новых клиентов, а любой ретаргетинг — для ретеншена и удержания. Но в одну модель это строить нельзя, потому что данные все равно будут кривые. Любое занижение эффективности первого клика приведет к занижению кол-ва новых клиентов и снижению общей выручки в будущем )
При этом в русском екоме до сих пор на первый клик все кладут, а топовые агентства строят свои отчеты по ласт-клику

Зависит от типичного сценария привлечения и конверсии клиента. На мой взгляд самые ценные переходы — первый и последний. В Analytics есть атрибуция, 40% на первый, 40% на последний, и 20% равномерно на все остальные. Называется «Атрибуция с привязкой к позиции»: https://support.google.com/analytics/answer/1665189?hl=ru

Как искать аутлаеров

В PBI:

Создаем отдельную табличку:

without_outliers = FILTER(SUMMARIZE(Query1;Query1[card];"count";COUNT(Query1[card]));[count]<40)

С помощью SUMMARIZE создаем сводную табличку и фильтруем аутлаеров с помощью FILTER

Потом связываем

 

В R:

boxplot(dataset$count)
out = boxplot(dataset$count)$out
out_data = as.data.frame(out)

 

 

Пост о статистической значимости

Что значит статистическая значимость.
«Изменение позволило достичь повышения конверсии на 20% с статистической значимостью 90%». К сожалению, это утверждение вовсе не равнозначно другому, очень похожему: «Шансы повысить конверсию на 20% составляют 90%». Так о чем же речь на самом деле?

90% — это вероятность проявления каких бы то ни было изменений в конверсии. Другими словами, если бы мы проводили десять А/B-тестов, чтобы получить этот результат, и решили бы проводить все десять до бесконечности, то один из них (так как вероятность изменений 90%, то 10% остаётся на неизменный исход), вероятно, закончился бы приближением результата «после теста» к первоначальной конверсии – то есть, без изменений. Из остающихся девяти тестов некоторые могли бы показать рост, составляющий куда меньше 20%. В других результат мог бы превысить эту планку.

Т.е. если говорить про p- value, то это вероятность получить такие же или более выраженные отличия. Чем больше уровень p-value, тем больше шанс, что в последующих тестах мы получим более отличающиеся значения. Вот так, никакой гарантии!

Как тестировать изменения в относительных величинах(конверсии, например)

Любую конверсию можно представить вот так:

Это так называемый биномиальный эксперимент.

Биномиальный эксперимент состоит из n испытаний, каждое из которых может
принимать одно из двух значений: «успех» или «неудача».
Каждое испытание должно быть независимым — исход предыдущего испытания не влияет на результат следующего. Вероятность успеха одинакова для каждого испытания. В примере с монетами каждое испытание — подбрасывание монеты. Успехом мы считаем выпадение решки. Неудачей — выпадение орла.

Можно проверить в калькуляторе http://getdatadriven.com/ab-significance-test Там используется односторонний критерий (one-sided test) t.test в R

Как тестировать изменения AOV

Скопировать ревень для транзакций для двух вариантов:

Вставить в калькулятор http://www.evanmiller.org/ab-testing/t-test.html

 

 

 

Как проверять гипотезы на данных

Конспект по докладу:

 

  1. Конечные гипотезы проверяем с помощью статистического критерия. Это математическое правило, формулы и алгоритм их применения.
  2. При использовании статистического критерия смотри на p-value:
  3. Как выбрать статистический критерий?


    Для каждой цели и условий теста есть свой статистический критерий




  4. Вот пример критерия Фишера:

 

 

План обучения Data science

SQL: If you can’t get data, you can’t analyze data. Whether you retrieve data from a SQL database or Hadoop cluster with a SQL-language layer on top of it, this is where you start. http://sqlschool.modeanalytics.com/ is a great interactive learning interface. O’Reilley’s SQL Cookbook is a masterpiece that traverses all levels of SQL proficiency.
Full-Stack Data Science: Coursera offers a full stack online curriculum on a continuous basis for a reasonable price. This DOES NOT teach you SQL. If you’re in SF or NYC, you can attend General Assembly’s pricier in-person full stack curriculum. This gives you a cursory introduction to data storage, retrieval, prep, light analysis, and deeper predictive and inferential analysis.
Python: Code Academy or Udemy will teach you the basics. Python can play two functions in the skill stack: 1) to conduct ad-hoc statistical analysis as you would with R, 2) to do everything else. Python is important for the «everything else.» You might use it to get data from APIs, scrape, write ETL jobs, refresh data in your warehouse, or retrain models. This is the piece of the skill stack moves you from being a Static Data Scientist (one who works with data in a manual fashion), to a Live DataScientist (one who has automated many of the processes contributing to data science output, loosely defined).

Basic Statistics: Khan Academy Probability and Statistics.
Linear Algebra and Multivariable Calculus: Go to a local college or Khan Academy to brush up on Multivariable Calculus and Linear Algebra. Their curriculums have largely been the same for the past 5 decades.
Mapreduce/Hadoop: Focus on this last**. There are so many technologies that enable SQL-like interfacing with Hadoop that to know how to write a MapReduce job is, for the most part, not necessary. To build real MapReduce pipelines is a behemoth of a task that might be the work of an early-stage startup Data Scientist, but shouldn’t be if you have a solid BI infrastructure team. This is why companies hire the rockstars we know as backend and data engineers. Side note: if you ever meet one and aren’t sure what their company does, thank them for their service to our country, regardless.
Cleaning: plan to spend most of your time cleaning and transforming in these languages/technologies. The analysis is the fast and fun part.